参考:https://openpyxl.readthedocs.io/en/stable/
概述
openpyxl模块是一个读写Excel 2010及以上版本(.xlsx
)的Python库,如果要处理更早格式的Excel文档(.xls
),需要用到额外的库(xlrd/xlwt),openpyxl是一个比较综合的工具,能够同时读取和修改Excel文档。
安装
若需要插入图像,需要安装:
方法
创建
创建文件
1 2 3 4 5 6 7 8
| from openpyxl import Workbook
wb = Workbook() ws = wb.active ws.title = '今天天气真好' print(ws.title) wb.save('测试.xlsx')
|
创建sheet
使用Workbook.create_sheet()
可以创建新的sheet:
1 2 3 4 5
| >>> ws1 = wb.create_sheet("Mysheet")
>>> ws2 = wb.create_sheet("Mysheet", 0)
>>> ws3 = wb.create_sheet("Mysheet", -1)
|
若不指定sheet的名称,则会安装sheet1、sheet2…的方式创建。
修改sheet的名称:
默认title的背景色为白色,指定背景色的方法如下:
1
| ws.sheet_properties.tabColor = "1072BA"
|
可以循环所有的sheet的:
1 2
| >>> for sheet in wb: ... print(sheet.title)
|
打开已有文件
1 2
| from openpyxl import load_workbook wb = load_workbook('测试.xlsx')
|
插入数据
插入的方式
方式1:数据可以直接分配到单元格中(可以输入公式)
1 2 3 4 5 6
| from openpyxl import load_workbook wb = load_workbook('测试.xlsx') ws = wb.active ws['C2'] = '你好啊' ws['D2'] = '世界!' wb.save('测试.xlsx')
|
方式2:可以附加行,从第一列开始附加(从最下方空白处)
方式3:Python类型会被自动转换
1 2 3 4 5 6 7 8 9
| from openpyxl import load_workbook import datetime wb = load_workbook('测试.xlsx') ws = wb.active
ws['E5'] = datetime.datetime.now().strftime('%Y-%m-%d') wb.save('测试.xlsx')
|
获取单元格数据
可以使用切片的方式获取单元格的数据:
1
| >>> cell_range = ws['A1':'C2']
|
行和列范围内的数据也能获取:
1 2 3 4
| >>> colC = ws['C'] >>> col_range = ws['C:D'] >>> row10 = ws[10] >>> row_range = ws[5:10]
|
如果只需要工作表中的值,则可以使用Worksheet.value属性。这将迭代工作表中的所有行,但只返回单元格值。
1 2 3
| for row in ws.values: for value in row: print(value)
|
保存文件
1 2
| >>> wb = Workbook() >>> wb.save('balances.xlsx')
|
保存为模板:
1 2 3
| >>> wb = load_workbook('document.xlsx') >>> wb.template = True >>> wb.save('document_template.xltx')
|
单元格格式
1 2 3 4 5 6 7 8 9
| >>> import datetime >>> from openpyxl import Workbook >>> wb = Workbook() >>> ws = wb.active >>> >>> ws['A1'] = datetime.datetime(2010, 7, 21) >>> >>> ws['A1'].number_format 'yyyy-mm-dd h:mm:ss'
|
函数
1 2 3 4 5 6
| >>> from openpyxl import Workbook >>> wb = Workbook() >>> ws = wb.active >>> >>> ws["A1"] = "=SUM(1, 1)" >>> wb.save("formula.xlsx")
|
合并和拆分单元格
合并单元格时,除左上角单元格外的所有单元格都将从工作表中删除。
1 2 3 4 5 6 7 8 9 10 11
| >>> from openpyxl.workbook import Workbook >>> >>> wb = Workbook() >>> ws = wb.active >>> >>> ws.merge_cells('A2:D2') >>> ws.unmerge_cells('A2:D2') >>> >>> >>> ws.merge_cells(start_row=2, start_column=1, end_row=4, end_column=4) >>> ws.unmerge_cells(start_row=2, start_column=1, end_row=4, end_column=4)
|
插入图片
1 2 3 4 5 6 7 8 9 10 11 12 13
| >>> from openpyxl import Workbook >>> from openpyxl.drawing.image import Image >>> >>> wb = Workbook() >>> ws = wb.active >>> ws['A1'] = 'You should see three logos below' >>> img = Image('logo.png')
>>> ws.add_image(img, 'A1') >>> wb.save('logo.xlsx')
|