目录
一、对工作簿中对应工作表的相关操作
1、创建工作簿、工作表并指定活动工作表
2、加载创建的工作簿、修改工作表名字
3、复制活动工作表
4、删除指定工作表
二、对工作表中行、列、单元格的相关操作
1、 指定位置插入行 / 指定行数
2、删除指定行 / 指定多行
3、指定位置插入指定列 / 指定多列
4、删除指定列 / 指定多列
5、访问单个单元格 / 整行 / 整列 的内容
6、以切片方式访问指定范围内的单元格
7、行切片 / 列切片 的使用
8、使用公式对指定范围内的内容进行计算
9、移动目标区域内单元格中的内容
10、合并 / 拆分单元格
11、在单元格中插入图片并修改图片大小
12、修改指定行的高度 / 指定列的宽度
13、批量设置单元格的对齐方式
14、批量修改单元格的边框线及颜色
15、设置单元格中的字体
16、对单元格进行颜色填充
17、对工作表中的单元格进行折叠操作
"""
-*- coding:utf-8 -*-
Group : Sirius
Author : xiao66guo
Time : 2021-06-15 16:38
Software : PyCharm
ProjectName : superTable
FileName : excelPractice.py
E-mail : [email protected]
"""
from openpyxl import Workbook, load_workbook
'''创建工作簿'''
xgBook = Workbook("chartCollections.xlsx")
'''
创建工作表
:param title: 新工作表的名字
:type title: 字符型
:param index: 在第几个索引位置处插入新的工作表
:type index: 数值型
'''
'''方法一:在指定索引位置创建工作表'''
xgBook.create_sheet('two', 1)
'''方法二:在工作簿最后创建工作(default)'''
xgBook.create_sheet('two')
'''指定活动工作表<及将要操作的表>'''
xg = xgBook.active
'''保存'''
xgBook.save('chartCollections.xlsx')
结果:
'''加载创建的工作表'''
xgBook = load_workbook("chartCollections.xlsx")
'''指定活动工作表<一般来说,当我们打开一个Excel表格,会看到上次我们保存的表。
这个表是活动状态的。我们可以使用Workbook类中的active属性来读取这张表>'''
xgBook.active = xgBook['two']
'''获取活动工作表的名字'''
xgSheetName = xgBook.active.title
print(xgSheetName)
'''修改活动工作表的名字'''
xgBook.active.title = 'Three'
'''保存'''
xgBook.save('chartCollections.xlsx')
结果:
''' 复制活动工作表'''
xgSheet = xgBook.active
newSheet = xgBook.copy_worksheet(xgSheet)
print(newSheet.title)
'''指定新表的工作名字'''
newSheet.title = 'NewThree'
'''保存'''
xgBook.save('chartCollections.xlsx')
复制结果:
'''删除工作表'''
# 方法一
xg = xgBook['Three']
xgBook.remove(xg)
# 方法二
del xgBook['NewThree']
'''查看工作簿中所有工作表名字'''
print(xgBook.sheetnames)
'''保存'''
xgBook.save('chartCollections.xlsx')
要进行操作的工作表
'''在第一行之前插入一行'''
xg.insert_rows(1)
'''在第三行之前插入两行'''
xg.insert_rows(3, 2)
'''保存'''
xgBook.save('chartCollections.xlsx')
结果:
'''删除第一行'''
xg.delete_rows(1)
'''删除第二行及后面一行,共两行'''
xg.delete_rows(2, 2)
'''保存'''
xgBook.save('chartCollections.xlsx')
结果:
'''在第三列前插入一列'''
xg.insert_cols(3)
'''在第二列前插入两列'''
xg.insert_cols(2, 2)
'''保存'''
xgBook.save('chartCollections.xlsx')
结果:
'''删除第五列'''
xg.delete_cols(5)
'''删除第二列及后面一列,共2列'''
xg.delete_cols(2, 2)
'''保存'''
xgBook.save('chartCollections.xlsx')
结果:
'''访问单个单元格中的值'''
print('[A2] = %s' % xg['A2'].value)
print('[A][1] = %s' % xg['A'][1].value)
print('[A][0] = %s' % xg['A'][0].value)
'''访问整行内容'''
print(xg[1]) # 以元组的形式返回第一行中的所有内容
content = xg[1]
print("xg[1]返回的数据类型为:%s,\n返回的内容为:%s" % (type(content), xg[1]))
print('-'*100)
'''访问整列内容'''
print(xg["A"]) # 以元组的形式返回 'A' 列的所有内容
content = xg["A"]
print("xg['A']返回的数据类型为:%s, \n返回的内容为:%s" % (type(content), xg["A"]))
'''保存'''
xgBook.save('chartCollections.xlsx')
访问单个单元格的结果:
访问整行和整列的结果:
访问图中 A1:B3 的值:
'''以切片的方式来访问某一个范围内的单元格'''
# 方式一:
content = xg["A1:B3"] # 访问 'A1:B3' 范围内的单元格
print(content)
# 方式二:
content = xg["A1":"B3"]
print(content)
# 取出 "A1:B3" 范围内的指定单元格
cellValue = content[0][1].value
print(cellValue)
'''保存'''
xgBook.save('chartCollections.xlsx')
执行结果:
'''使用行切片'''
content = xg[1:2] # 访问第一行和第二行所有内容
print(content)
'''使用列切片'''
content = xg["A:B"] # 访问 A 和 B 两列的所有内容
print(content)
'''保存'''
xgBook.save('chartCollections.xlsx')
执行结果:
'''使用公式<在程序中不能看到函数计算后的值>'''
xg["G2"] = "=SUM(C2:F2)"
print(xg['G2'].value)
result = xg['G2'].value
print("G2 单元格的值为:%s" % result)
from openpyxl.utils import FORMULAE
result1 = 'SUM' in FORMULAE
print(result1)
'''查看所有能用的函数'''
print(FORMULAE)
'''保存'''
xgBook.save('chartCollections.xlsx')
结果:
'''移动单元格'''
''' move_range() 将目标单元格区域内的内容进行移动,
rows为正数时,单元格向下移动正数行;
为负数时,单元格向上移动 |负数| 行;
cols为正数时,单元格向右移动正数列,
为负数时,单元格向左移动 |负数| 行。
如果目标单元格有值,会被覆盖'''
xg.move_range("A2:G2", rows=1, cols=2)
'''保存'''
xgBook.save('chartCollections.xlsx')
执行结果:
接下来,将刚才A2:G2单元格,移动到原来的位置:
xg.move_range("C3:I3", rows=-1, cols=-2)
'''保存'''
xgBook.save('chartCollections.xlsx')
执行结果:
10.1 合并单行 / 单列单元格(将第三行的单元格进行合并)
'''合并单元格
合并后单元格中的内容会被合并前第一个单元格的内容填充
'''
xg.merge_cells("A3:F3")
result = xg["A3"].value # 返回第一个单元格的值
print('A3的值为:', result)
result = xg["B3"].value # 返回 None
print('B3的值为:', result)
'''保存'''
xgBook.save('chartCollections.xlsx')
执行结果:
10.2 合并多行和多列单元格
合并上图中红色框中的内容:
xg.merge_cells(start_row = 5, start_column = 1, end_row = 8, end_column = 3)
'''保存'''
xgBook.save('chartCollections.xlsx')
执行结果:
10.3 拆分单元格
接下来,就将刚合并的A5:C8的单元格进行拆分
xg.unmerge_cells(start_row = 5, start_column = 1, end_row = 8, end_column = 3)
'''保存'''
xgBook.save('chartCollections.xlsx')
执行结果:
接下来,用代码向合并的单元格中插入下面的图片
'''插入图片'''
from openpyxl.drawing.image import Image
img = Image('dianzan.gif')
'''修改图片大小'''
newSize = (80, 80)
img.height, img.width = newSize
xg.add_image(img, "A5")
'''保存'''
xgBook.save('chartCollections.xlsx')
执行结果:
'''修改行高和列宽'''
row_height = 40
column_width = 35
xg.column_dimensions['D'].width = column_width
xg.row_dimensions[2].height = row_height
'''保存'''
xgBook.save('chartCollections.xlsx')
执行结果:
设置D列所有内容 居中 对齐
'''单元格对齐方式
horizontal : 代表水平方向,可以左对齐left,还有居中center和右对齐right,分散对齐distributed,跨列居中centerContinuous,两端对齐justify,填充fill,常规general
vertical : 代表垂直方向,可以居中center,还可以靠上top,靠下bottom,两端对齐justify,分散对齐distributed
wrap_text / wrapText : 自动换行
horizontal_alignments = (
"general", "left", "center", "right", "fill", "justify", "centerContinuous",
"distributed", )
vertical_aligments = (
"top", "center", "bottom", "justify", "distributed",
)
'''
from openpyxl.styles import Alignment
align = Alignment(horizontal='center', vertical='center', wrapText=True)
print(xg["D5"])
for cell_content in xg['D2:D23']:
cell_content[0].alignment = align
'''保存'''
xgBook.save('chartCollections.xlsx')
执行结果:
14.1 修改单个单元格的边框线及颜色(设置 D2单元格的边框线及颜色)
'''修改单元格边框线'''
from openpyxl.styles import Border, Side
''''
border_style 的样式有:
dashDot','dashDotDot', 'dashed','dotted', 'double','hair', 'medium',
'mediumDashDot', 'mediumDashDotDot','mediumDashed', 'slantDashDot',
'thick', 'thin'
'''
'''double 样式,红颜色'''
thin = Side(border_style='thick', color="FF0000")
'''边框的位置'''
border = Border(left=thin, right=thin, top=thin, bottom=thin)
xg['D2'].border = border
'''保存'''
xgBook.save('chartCollections.xlsx')
执行结果:
14.2 批量修改单元格的边框线和颜色
修改 A10:E12 单元格的边框和颜色
'''批量修改单元格的边框线和颜色'''
'''A10:E12区域单元格设置边框'''
for row in xg['A10:E12']:
for cell in row:
cell.border = border
'''保存'''
xgBook.save('chartCollections.xlsx')
执行结果:
修改上图中 A5 单元格中的字体、大小、加粗、倾斜、颜色
'''设置单元格中的字体'''
from openpyxl.styles import Font
'''
字体的格式
'name', 'charset', 'family', 'b', 'i', 'strike',
'outline','shadow', 'condense', 'color', 'extend',
'sz', 'u', 'vertAlign','scheme'
字体大小,加粗,字体名称,字体名字
字体名称、字体大小、字体颜色、加粗、斜体、纵向对齐方式
(有三种:baseline,superscript, subscript)、
下划线、删除线,字体颜色可以用RGB 或 aRGB
'''
font = Font(name='微软雅黑', size=20, bold=True, italic=True, color="FF0000")
xg['A5'].font = font
'''保存'''
xgBook.save('chartCollections.xlsx')
执行结果:
对 A3 单元格进行颜色填充
'''单元格颜色填充'''
from openpyxl.styles import PatternFill
'''
fill_type 的样式为 None 或 solid
fill_type类型有:'none'、'solid'、'darkDown'、'darkGray'、'darkGrid'、
'darkHorizontal'、'darkTrellis'、'darkUp'、'darkVertical'、'gray0625'、
'gray125'、'lightDown'、'lightGray'、'lightGrid'、'lightHorizontal'、
'lightTrellis'、'lightUp'、'lightVertical'、'mediumGray'
start_color : 代表的是前景色
end_color : 代表的是背景色
在平时的单元格颜色填充时,使用start_color 和 solid 进行填充即可
'''
# fill = PatternFill(fill_type=None, start_color='FFFFFF', end_color='000000')
fill = PatternFill(patternType='solid', start_color='9932CC')
xg['A3'].fill = fill
'''保存'''
xgBook.save('chartCollections.xlsx')
执行结果:
对 A ~ C 三列和 10 ~ 20 行的内容进行折叠处理
'''折叠操作'''
'''折叠 A-C 列'''
xg.column_dimensions.group("A", "C", hidden=True)
'''折叠11到20行'''
xg.row_dimensions.group(10, 20, hidden=True)
'''保存'''
xgBook.save('chartCollections.xlsx')
执行效果: