Python 操作 Excel 之 openpyxl 模块

Noah
Noah
发布时间:2026-10-16 | 5人浏览过
原创

本文详细介绍如何使用 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 模块内容请搜索本站以前的文章或继续浏览下面的相关文章,希望大家以后多多支持本站!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表