There are three types of openpyxl modules (first letter capitalized):
Workbook 是对工作簿的抽象
Worksheet 是对表格的抽象
Cell 是对单元格的抽象
1. Installation: pip install openpyxl
2. Create a new workbook
from openpyxl import Workbook #导入模块
wb = Workbook('abc.xlsx') #新建名为abc的工作簿
wb.save('abc.xlsx')
#保存工作簿,完成新工作簿的建立(将覆盖同名文件且无警告)
3. Open an existing workbook:
from openpyxl import load_workbook #导入模块
wb = load_workbook('abc.xlsx') #打开名为abc的工作簿
wb = load_workbook('abc.xlsx',date_only=True)
#设置单元格显示为值显示(默认为显示公式)
4. Create and delete worksheets
ws1 = wb.create_sheet('Mysheet') #插入到最后(默认)
ws2 = wb.create_sheet('Mysheet',0) #插入到最前
ws3 = wb.create_sheet('Mysheet',-1) #插入到倒数第二
wb.remove('Mysheet') #删除工作表(方法一)
del wb('Mysheet') #删除工作表(方法二)
5. Modify the name of the worksheet
ws.title = "New Title"
6. Modify the label background color of the worksheet
ws.sheet_properties.tabColor = '1072BA' #默认为白色
7, view the worksheet name
print(wb.sheetnames) #打印输出所有工作表
for sheet in wb: #遍历并打印输出所有工作表
print(sheet.title)
wb.get_sheet_names() #获取文档所有工作表名称(旧版,不建议使用)
wb.get_sheet_by_name() #获取单个工作表名称(旧版,不建议使用,新版会警告)
wb.get_active_sheet() #获取当前活跃的工作表(旧版,不建议使用)
wb.sheetnames #获取文档所有工作表名称(新版)
wb['Sheet1'] #获取指定的工作表(新版)
wb.active #获取当前活跃的工作表(新版)
wb.worksheets #以列表形式返回所有工作表
wb.read_only #判断是否以只读方式打开
8, copy
source = wb.active #获取当前活跃的工作表
target = wb.copy_worksheet(source) #复制工作表
说明:只有单元格(包括值、样式、超链接、备注)和一些工作表对象
(包括尺寸、格式和参数)会被复制。其他属性不会被复制,如图片、图表;
无法在两个文档中复制工作表。当文档处于只读或只写状态时也无法复制工作表。
9, attribute operation
wb.encoding #获取文档的字符集编码
wb.properties #获取文档的元数据如标题,创建者,创建日期等
10. Data manipulation
①Cell operation
c = ws['A6'] #c值为A6处单元格对象
print("A列单元格内容",sheet["A"]) #打印A列内容
d = ws.cell(row=4,column=2,value=10) #通过行列号访问单元格
for i in range(1,101): #只要访问就创建
for j in range(1,101):
ws.cell(row=i,column=j)
print(sheet.max_row) #获取最大行
print(sheet.max_column) #获取最大列
cell_range = ws['A1':'C2'] #通过切片访问多个单元格
colC=ws['C'] #获取范围行或列(下同)
col_range = ws['C:D']
row10 = ws[10]
row_range = ws[5:10]
rows #按行获取单元格-生成器
columns #按列获取单元格-生成器
freeze_panes #冻结窗口,格式为sheet.freeze_panes='C3'
values #按行获取表格内容(数据)-生成器
append #在表格末尾添加数据
#合并和拆分单元格
sheet.merge_cells('A1:C1') #合并A1,B1,C1为A1
sheet.unmerge_cells('A2:D2') #拆分A2为A2,B2,C2,D2
wb['Sheet1']['C3'] #通过坐标获取工作表对象
wb['Sheet1'].cell(row=3,column=3) #通过行列号获取工作表对象
sheet['C10'] = '=sum(C1:C9)' #单元格计算(需保存文件后才能显示)
#单元格属性
row:所在行
column:所在列
value:值
coordinate:坐标
wb['Sheet1'].cell(row=1,column=2).value #获取单元格的值
#行列置换
form openpyxl.utils import get_column_letter,column_index_from_string #导入模块
print(get_column_letter(2)) #根据列的数字返回字母
print(column_index_from_string('D')) #根据字母返回列的数字
#Worksheet.iter_rows()方法:按行获取所有单元格
>>> for row in ws.iter_rows(min_row=1, max_col=3, max_row=2): #行方法
... for cell in row: #遍历行
... print(cell) #打印行
输出结果:
<Cell Sheet1.A1>
<Cell Sheet1.B1>
<Cell Sheet1.C1>
<Cell Sheet1.A2>
<Cell Sheet1.B2>
<Cell Sheet1.C2>
#用Worksheet.iter_cols()方法返回列
#出于性能考虑,列方法不支持只读模式
>>> for col in ws.iter_cols(min_row=1, max_col=3, max_row=2): #列方法
... for cell in col: #遍历列
... print(cell) #打印列
输出结果:
<Cell Sheet1.A1>
<Cell Sheet1.A2>
<Cell Sheet1.B1>
<Cell Sheet1.B2>
<Cell Sheet1.C1>
<Cell Sheet1.C2>
#遍历文件内的所有行和列(单元格属性有提及)
Worksheet.rows
Worksheet.columns #出于性能考虑,Worksheet.columns属性不支持只读模式
ws = wb.active #获取文档工作表
ws['C9'] = 'hello world' #赋值
tuple(ws.rows) #按行输出单元格
tuple(ws.columns) #按列输出单元格
#工作表中获取值:Worksheet.values
#将遍历工作表中所有行,只返回单元格值
for row in ws.values:
for value in row:
print(value)
②Stream file storage: NamedTemporaryFile() method
#方法一
>>> wb = load_workbook('document.xlsx')
>>> wb.template = True
>>> wb.save('document_template.xltx')
#方法二
>>> wb = load_workbook('document_template.xltx')
>>> wb.template = False
>>> wb.save('document.xlsx', as_template=False)
③Set cell format
from openpyxl.styles import Font,colirs,Alignment #导入模块
#格式设置:加粗斜体绿色等线24号字,cell的font属性
style1 = Font(name='等线', size=24, italic=True, color=colors.GREEN, bold=True)
sheet['A1'].font = style1 #格式赋予A1单元格
#格式设置:垂直和水平居中,cell的aligment属性
sheet['A2'].alignment = Alignment(horizontal-'center',vertical='center') #格式赋予A2单元格
sheet.row_dimensions[6].height = 6 #设置6行的行高为6
sheet.column_dimensions['C'].width = 6 #设置C列的宽度为6
#创建abc的excel文件
from openpyxl import Workbook
wb = Workbook('abc.xlsx') #创建文件
ws1 = wb.active #获取文档第一个工作表(默认)
ws1.title = '1' #修改表的名称
ws2 = wb.create_sheet('2',0) #新建2的工作表到最前
ws2['A1'] = '1' #为2的工作表添加数据(下同)
ws2['A2'] = '2'
ws2['A3'] = '3'
ws2['B1'] = 'A'
ws2['B2'] = 'B'
ws2['B3'] = 'C'
ws2['B4'] = datetime.datetime.now().strftime('%Y=%m-%d') #添加日期和时间
sheet = wb['Sheet2'] #获取工作表
sheet = wb.active #变更工作表
sheet.freeze_panes = 'C3' #C3单元格左列和上行冻结
wb1 = wb.copy_worksheet('abc.xlsx') #复制文档
wb.save('abc.xlsx') #保存文档,完成新文档的建立
wb1.save('abc1.xlsx') #保存复制的文档