Python openpyxl 库

Velika ·
更新时间:2024-11-14
· 764 次阅读

文章目录openpyxl 库简介Excel 文件安装 openpyxl 模块创建工作簿处理数据访问多个单元格返回单元格的值保存数据到文件中加载文件补充插入时间使用公式合并/拆分单元格加载图像以上用法结果展示 openpyxl 库 简介

openpyxl 是一个用于读取/写入 Excel 2010 xlsx/xlsm/xltx/xltm 文件的 Python 库

Excel 文件

这里介绍下一些基本定义:Excel 电子表格文档称为工作簿。单个工作簿保存在扩展名为 .xlsx 的文件中。每个工作簿可以包含多个工作表。

安装 openpyxl 模块

openpyxl 是一个第三方模块,当要用于处理 Excel 文件时,须先安装。使用以下的命令进行安装

$ pip install openpyxl 创建工作簿

可以通过导入 openpyxl 的 Workbook 类来创建工作簿(workbook)。例如:

>>> from openpyxl import Workbook >>> wb = Workbook()

创建工作簿后,至少有一个工作表(worksheet)。可以使用 Workbook.active 属性来获取:

>>> ws = wb.active

默认情况下,这个方法获取的是第一个工作表

创建新的工作表 ,可以使用 Workbook.create_sheet() 方法:

>>> ws1 = wb.create_sheet('Mysheet') >>> ws2 = wb.create_sheet('Mysheet', 0) >>> ws3 = wb.create_sheet('Mysheet', -1)

创建新工作表的时候,会自动赋予一个名字。会按照(Sheet,Sheet1,Sheet2)这样的顺序依次赋值 。不过能够通过 Worksheet.title 属性来修改这个名称。

ws.title = "New Title"

如果想要查看一个工作簿中所有工作表的名称,可以通过 Workbook.sheetname 属性来进行查看:

>>> wb.sheetnames ['Mysheet1', 'New Title', 'Mysheet2', 'Mysheet']

当然也可以用循环遍历的方式:

>>> for sheet in wb: ... print(sheet) ... 处理数据

当创建完工作簿以及工作表后,现在就可以考虑修改单元格的内容。单元格能够作为工作表的键直接访问:

>>> c = ws['A1']

这个时候,将会返回 A1 处单元格,如果不存在的话,则创建一个。这个时候,可以直接赋值:

>>> ws['A1'] = 3

除了用这种大写字母(表示列)加数字(表示行)的形式来访问单元格。

还可以通过 Worksheet.cell()方法直接使用行和列的表示法来访问单元格:

>>> a = ws.cell(row=3, column=1, value=8) 访问多个单元格

当需要访问多个单元格的时候,可以使用切片的方法。当访问一个区域可以参考如下写法:

>>> cell_range = ws['A1':'D3']

当访问多行或多列时,可以使用如下的方法:

>>> col_c = ws['C'] >>> col_range = ws['C':'D'] >>> row_10 = ws[10] >>> row_range = ws[5:10]

除了使用上面切片的方法。同样可以使用 Worksheet.iter_rows() 方法访问,这个方法将逐行返回:

>>> for row in ws.iter_rows(min_row=1, max_col=3, max_row= 2): ... for cell in row: ... print(cell) ...

同样的,还有 Worksheet.iter_cols() 方法,这个方法将逐列返回:

>>> for col in ws.iter_cols(min_row=1, max_col=3, max_row= 2): ... for cell in col: ... print(cell) ...

这里有需要注意的地方,Worksheet.iter_cols 方法在只读模式下不可用。

如果需要遍历的是文件中所有的行或列,则可以考虑 Worksheet.rows 属性:

>>> ws = wb.active >>> ws['C4'] = 'Hello World!' >>> tuple(ws.rows) ((, , ), (, , ), (, , ), (, , ))

或者 Worksheet.columns 属性:

>>> tuple(ws.columns) ((, , , ), (, , , ), (, , , )) 返回单元格的值

如果只是需要返回工作表中单元格的值,可以使用 Worksheet.values 属性。

该方法将遍历工作表中所有行,但仅返回单元格中的值。

>>> for row in ws.values: ... for value in row: ... print(value) ... None None None None None None None None None Hello World! None Hello World! 保存数据到文件中

保存工作簿,可以使用 Workbook 对象的 Workbook.save() 方法:

>>> wb.save('temp.xlsx')

打开保存的文件,可以看到,下面的工作表名,正是上面创建的表名。

文件信息

以及上面使用方法插入表格中的内容。

表格内容

加载文件

当加载文件,可以使用 openpyxl.load_workbook() 方法来打开一个本地存在的文件:

>>> from openpyxl import load_workbook >>> wb2 = load_workbook('temp.xlsx') >>> wb2.sheetnames ['Mysheet1', 'New Title', 'Mysheet2', 'Mysheet'] 补充 插入时间 >>> import datetime >>> from openpyxl import load_workbook >>> wb2 = load_workbook('temp.xlsx') >>> ws = wb2.active >>> ws.title 'Mysheet1' >>> ws['A1'] = datetime.datetime.now() >>> ws['A1'].value datetime.datetime(2020, 3, 29, 16, 29, 21, 786731) >>> ws['A1'].number_format 'yyyy-mm-dd h:mm:ss' 使用公式

可以直接将 Excel 的公式,用字符串的格式赋值给某个单元格,如下:

>>> ws['A2'] = '=SUM(1,1)' >>> ws['A2'].value '=SUM(1,1)' 合并/拆分单元格

当需要合并和拆分单元格时,可以使用 worksheet.merge_cells() 方法以及 worksheet.unmerge_cells() 方法:

>>> ws.merge_cells('A2:B2') >>> # 先将 A3:B3 合并,再尝试拆分 ... ws.merge_cells('A3:B3') >>> ws.unmerge_cells('A3:B3') 加载图像

这一步依赖 Pillow 库,所以使用之前需要先安装 Pillow 库。

>>> from openpyxl.drawing.image import Image >>> img = Image('k.jpg') >>> ws.add_image(img, 'A5') >>> wb.save('temp_1.xlsx') 以上用法结果展示

简单用法-结果展示

在这张图片可以看到,A1 插入的时间已经生效。

A2 显示的结果是 2,红色标记的部分,表示这个结果是用这个公式得到的结果,也就说明公式插入也是生效的。

同时可以看到,A2:B2 单元格已经合并。

最后是插入图片,可以看到在 A5 单元格,成功插入了一张图片。

以上内容就是关于 openpyxl 库对 Excel 文件进行处理的简单用法。

欢迎关注微信公众号《书所集录》


作者:"大梦三千秋



openpyxl Python

需要 登录 后方可回复, 如果你还没有账号请 注册新账号