Python 操作 Excel 之 openpyxl 模块
本文详细介绍如何使用 Python 的 openpyxl 库读写 Excel 2010 xlsx/xlsm 文件。内容涵盖安装模块、Workbook/Worksheet/Cell 核心概念、创建与修改工作表、单元格数据读写、图像插入及样式设置,帮助开发者快速掌握 Excel 自动化处理技能。
在开始编码之前,首先需要安装所需的第三方库。执行以下命令即可完成安装:
pip install openpyxl官方对该库的功能描述如下:
A Python library to read/write Excel 2010 xlsx/xlsm files
即一个用于读取和写入 Excel 2010 xlsx/xlsm 格式文件的 Python 库。
1.打开已有 Excel 文件
获取库之后,首先尝试加载本地现有的 Excel 文件,这是进行后续数据控制的基础。
from openpyxl import load_workbook
wb = load_workbook('测试表格.xlsx')
# 输出
# <openpyxl.workbook.workbook.Workbook object at 0x00000195680F96D0>在编写代码前,有必要了解 Excel 的基本结构知识:
- Excel 使用字母表示列名,数字表示行号。例如,左上角的第一个单元格记为 A1,其下方依次为 A2、A3 等。
- Excel 主要由工作簿(Workbook)、工作表(Worksheet)和单元格(Cell)三个层级构成,分别对应
openpyxl库中的Workbook类、Worksheet类和Cell类。
操作 Excel 文件通常遵循以下三个基本步骤:
- 第一步,打开 Excel 文件,生成 Workbook 对象;
- 第二步,获取具体的工作表对象,即 Worksheet 对象;
- 第三步,对表格中的单元格对象(Cell 对象)进行具体操作。
理解上述概念后,后续的代码逻辑将变得非常直观且易于理解。
2.创建一个 Excel 文件,并修改 sheet
接下来的代码演示如何创建一个新的 Excel 文件,并将默认的第一个工作表名称修改为【测试】。
import openpyxl
if __name__ == '__main__':
wb = openpyxl.Workbook()
ws = wb.active
# 更改第一个 sheet 名称
ws.title = "测试"
# 保存
wb.save('example.xlsx')运行 Python 文件后,会在当前目录下生成相应的 Excel 文件,打开后可查看第一个工作表的名称是否已更改。

如果需要创建第二个工作表(sheet),只需在 Workbook 对象上继续调用相关方法追加即可。
import openpyxl
if __name__ == '__main__':
wb = openpyxl.Workbook()
ws = wb.active
# 更改第一个 sheet 页名称
ws.title = "Sheet1"
# 新增第二个 sheet 页
ws2 = wb.create_sheet("Sheet2")
# 新增第三个 sheet 页
# 将 create_sheet() 函数中的第二个参数定义为 0,表示该 sheet 在最前面
ws3 = wb.create_sheet("Sheet3", 0)
# 保存
wb.save('example.xlsx')追加工作表使用的函数是 create_sheet(),调用时可以通过第二个参数指定新工作表的位置顺序。

若需对工作表标签进行更细致的样式设置,如修改标签背景颜色,可通过配置相关属性实现。
import openpyxl
if __name__ == '__main__':
wb = openpyxl.Workbook()
ws = wb.active
# 更改第一个 sheet 页名称
ws.title = "Sheet1"
ws.sheet_properties.tabColor = "03a9f4"
# 新增第二个 sheet 页
ws2 = wb.create_sheet("Sheet2")
# 新增第三个 sheet 页
# 将 create_sheet() 函数中的第二个参数定义为 0,表示该 sheet 在最前面
ws3 = wb.create_sheet("Sheet3", 0)
# 保存
wb.save('example.xlsx')
3.选择 sheet 的不同方式
使用 wb["Sheet1"] 可以通过类似字典的键值对模式读取特定的 sheet,此外还可以使用 get_sheet_by_name() 方法调用,但该方法已被官方标记为弃用,建议仅掌握第一种用法。
import openpyxl
if __name__ == '__main__':
wb = openpyxl.Workbook()
ws = wb.active
# 更改第一个 sheet 页名称
ws.title = "Sheet1"
ws_1 = wb["Sheet1"]
ws_1_1 = wb.get_sheet_by_name("Sheet1") # 该方法将被弃用,建议用上述形式调用
print(ws_1)
print(ws_1_1)
# wb.save('example.xlsx')4.Worksheet对象
Worksheet 对象代表具体的工作表,主要用于获取单元格数据或修改表格内容。
以下是需要优先了解的相关属性:
title:获取或设置表格的标题;dimensions:获取表格中包含数据区域的范围大小;max_row:获取表格的最大行号;min_row:获取表格的最小行号;max_column:获取表格的最大列号;min_column:获取表格的最小列号;rows:按行迭代获取单元格(Cell)对象,返回一个生成器;columns:按列迭代获取单元格(Cell)对象,返回一个生成器。
具体代码示例如下,其中涉及的表格数据参考下述截图:
from openpyxl import load_workbook
wb = load_workbook('测试表格.xlsx')
if __name__ == '__main__':
ws = wb.active
# 更改第一个 sheet 页名称
ws.title = "My_Sheet"
ws_1 = wb["My_Sheet"]
print(ws_1.title) # 获取标题
print(ws_1.dimensions) # 有数据的区域大小,无数据是 A1:A1
print(ws_1.max_row) # 最大行数
print(ws_1.min_row) # 最小行数
print(ws_1.max_column)
print(ws_1.min_column)
print(ws_1.rows)
print(ws_1.columns)
除了属性外,Worksheet 对象还包含多种方法,具体如下:
iter_rows:按行迭代获取所有单元格,可通过 min_row, max_row, min_col, max_col 参数限制范围;iter_columns:按列迭代获取所有单元格;append:在表格末尾追加一行数据;merged_cells:合并多个单元格;unmerged_cells:移除已合并的单元格。
Worksheet 对象的属性和方法大多会返回 Cell 对象,即单元格对象,以便进行进一步操作。
5.Cell 对象
Cell 对象相对简单,常用的属性如下:
row:单元格所在的行号;column:单元格所在的列号;value:单元格的值;coordinate:单元格的坐标(如 A1)。
from openpyxl import load_workbook
wb = load_workbook('测试表格.xlsx')
if __name__ == '__main__':
ws = wb.active
for item in ws.rows:
print(item) # 按照行输出
print(item[0].value) # 输出单元格的值在获取单元格后,即可对其中的值进行修改,例如以下代码所示:
from openpyxl import load_workbook
wb = load_workbook('测试表格.xlsx')
if __name__ == '__main__':
ws = wb.active
# 输出修改前
for item in ws.rows:
print(item) # 按照行输出
print(item[0].value) # 输出单元格的值
item[0].value = 1
# 输出修改后的值,注意不保存文件,数据不会存储
for item in ws.rows:
print(item[0].value) # 输出单元格的值
# wb.save('example.xlsx')修改单元格内容后,必须调用 wb.save() 方法保存文件,否则修改不会持久化到磁盘。
使用行列式定位单元格:利用工作表的 cell() 方法,可以直接通过行号和列号定位到特定单元格,具体用法如下所示:
from openpyxl import load_workbook
wb = load_workbook('测试表格.xlsx')
if __name__ == '__main__':
ws = wb.active
# 输出修改前
for item in ws.rows:
print(item) # 按照行输出
print(item[0].value) # 输出单元格的值
item[0].value = 1
# 输出修改后的值,注意不保存文件,数据不会存储
for item in ws.rows:
print(item[0].value) # 输出单元格的值
# 直接定位单元格
c = ws.cell(row=2, column=3)
print(c)
print("单元格A2,B3里面的内容是",c.value)
wb.save('example.xlsx')6.单元格插入图像
使用以下代码可以在 Excel 的指定单元格内插入图片。在正式编码前,需先导入相关模块:
from openpyxl.drawing.image import Image接下来即可在对应的单元格中添加图片,关键代码涉及 add_image() 方法,具体实现如下:
# 创建图像,参数是图片路径
img = Image('cup_PNG2001.png')
# add_image(图片,要添加单元格的位置)
ws.add_image(img, 'A2')
wb.save('example.xlsx')7.设置单元格样式
在 Excel 中,可以对单元格样式进行多种操作,例如设置字体加粗、倾斜或更改背景色。
使用前需提前导入相关的样式类:
from openpyxl.styles import Font, colors, Alignment接下来可以修改相应的字体样式:
from openpyxl import load_workbook
from openpyxl.styles import Font, colors, Alignment
wb = load_workbook('测试表格.xlsx')
if __name__ == '__main__':
ws = wb.active
c_style = Font(size=20, bold=True, italic=True, color='ff0000')
ws['A1'].font = c_style
wb.save('example.xlsx')运行结果如下所示,请注意观察 A1 单元格的变化。在此需特别注意,代码中若存在任何一处错误,新的样式可能无法生效。

其他内容如设置对齐方式,读者可自行扩展尝试。
ws['B1'].alignment = Alignment(horizontal='center', vertical='center')
关于行高、列宽、单元格合并与取消合并等功能,建议读者根据实际需求自行完成相关代码编写。
到此这篇关于 Python 操作 Excel 之 openpyxl 模块的文章就介绍到这了,更多相关 python openpyxl 模块内容请搜索本站以前的文章或继续浏览下面的相关文章,希望大家以后多多支持本站!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









