Python办公自动化之openpyxl使用与避坑全面指南

 更新时间:2026年01月05日 09:26:24   作者:小庄-Python办公  
在现代职场中,Excel 无疑是数据处理的霸主, Python 的 openpyxl 库可以帮你自动处理 Excel 表格,下面小编将带你从零开始,系统掌握使用 Python 读写,修改和格式化 Excel 文件的核心技能

在现代职场中,Excel 无疑是数据处理的霸主。然而,面对成千上万行的数据、每日重复的报表生成任务,手动操作不仅效率低下,而且容易出错。

如果你曾梦想有一只“看不见的手”帮你自动处理 Excel 表格,那么 Python 的 openpyxl 库就是你的最佳搭档。

本指南专为编程新手设计,将带你从零开始,系统掌握使用 Python 读写、修改和格式化 Excel 文件的核心技能。

1. 什么是 openpyxl?

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

为什么选择它?

  • 无需安装 Excel: 即使电脑上没装 Office,也能处理表格。
  • 不仅是读取: 它能修改格式、插入公式、绘制图表。
  • 自动化神器: 它可以将原本需要几小时的人工操作缩短至几秒钟。

2. 准备工作

在开始之前,请确保你已经安装了 Python 环境。

2.1 安装库

打开你的终端(Terminal 或 CMD),输入以下命令安装 openpyxl

pip install openpyxl

2.2 理解 Excel 的三大核心概念

在使用代码操作 Excel 之前,我们需要建立一个心理模型,这与我们手动操作 Excel 是一致的:

  • Workbook(工作簿): 整个 Excel 文件(例如 data.xlsx)。
  • Worksheet(工作表): 工作簿下方的标签页(例如 Sheet1, 财务表)。
  • Cell(单元格): 存储数据的最小方格(例如 A1, B2)。

层级关系: Workbook -> Worksheet -> Cell

3. 实战演练:由浅入深

我们将通过三个场景来掌握核心功能。

场景一:读取现有的 Excel 文件

假设你有一个名为 sample.xlsx 的文件,我们想读取里面的数据。

from openpyxl import load_workbook

# 1. 加载工作簿
# data_only=True 表示读取公式计算后的值,而不是公式本身
wb = load_workbook('sample.xlsx', data_only=True)

# 2. 选择工作表
# 方式A:获取当前活跃的表(通常是第一个)
sheet = wb.active
# 方式B:根据表名获取
# sheet = wb['Sheet1']

# 3. 读取特定单元格的值
print(f"A1单元格的值是: {sheet['A1'].value}")

# 4. 遍历读取多行数据
print("--- 开始遍历数据 ---")
# iter_rows 允许我们指定读取的范围
for row in sheet.iter_rows(min_row=2, max_row=5, min_col=1, max_col=3):
    # row 是一个包含单元格对象的元组
    row_data = [cell.value for cell in row]
    print(row_data)

# 5. 关闭工作簿(虽然 Python 会自动回收,但显式关闭是好习惯)
wb.close()

场景二:创建并写入新的 Excel 文件

现在,我们来从头创建一个报表。

from openpyxl import Workbook

# 1. 创建一个新的工作簿对象(注意:不需要 load_workbook)
wb = Workbook()

# 2. 获取活跃的工作表
ws = wb.active
ws.title = "销售统计"  # 修改表名

# 3. 写入表头
headers = ['日期', '产品', '销售额']
ws.append(headers)  # append 方法会将列表数据添加到当前数据的下一行

# 4. 写入数据
data = [
    ['2023-10-01', '键盘', 500],
    ['2023-10-01', '鼠标', 120],
    ['2023-10-02', '显示器', 1500]
]

for row in data:
    ws.append(row)

# 5. 直接修改特定单元格
ws['D1'] = "备注"
ws['D2'] = "热销"

# 6. 保存文件
# 注意:如果文件已存在,这步操作会直接覆盖原文件
wb.save('sales_report.xlsx')
print("文件已成功生成!")

场景三:美化与样式(进阶)

仅仅只有数据是不够的,专业的报表需要字体、颜色和对齐方式。

from openpyxl import Workbook
from openpyxl.styles import Font, PatternFill, Alignment

wb = Workbook()
ws = wb.active

# 写入测试数据
ws['A1'] = "季度总结报告"
ws.merge_cells('A1:C1')  # 合并单元格

# --- 设置样式 ---

# 1. 定义字体:加粗,大小14,蓝色
title_font = Font(name='微软雅黑', size=14, bold=True, color="0000FF")

# 2. 定义背景填充:黄色
yellow_fill = PatternFill(start_color="FFFF00", end_color="FFFF00", fill_type="solid")

# 3. 定义对齐方式:水平居中,垂直居中
center_align = Alignment(horizontal='center', vertical='center')

# --- 应用样式 ---
cell = ws['A1']
cell.font = title_font
cell.fill = yellow_fill
cell.alignment = center_align

wb.save('styled_report.xlsx')

4. 新手常见的“坑”与避坑指南

在使用 openpyxl 的过程中,初学者经常会遇到以下问题:

1. 索引从 1 开始,而不是 0

在 Python 的列表(List)中,第一个元素的索引是 0。但在 openpyxl 中,Excel 的行(Row)和列(Column)都是从 1 开始的。

  • 错误: sheet.cell(row=0, column=0)
  • 正确: sheet.cell(row=1, column=1) (代表 A1)

2..xls和.xlsx的区别

openpyxl 不支持 旧版的 .xls 格式(Excel 97-2003)。

解决方案: 如果你需要处理 .xls 文件,请先将其另存为 .xlsx,或者使用另一个库 xlrd(但 xlrd 新版也逐渐停止支持 .xlsx,建议统一转换为 .xlsx 处理)。

3. 公式读取问题

当你读取一个包含公式的单元格(如 =SUM(A1:A5))时:

  • 默认情况下,openpyxl 会读取到字符串 "=SUM(A1:A5)"
  • 解决方案: 在加载文件时使用 load_workbook('file.xlsx', data_only=True),这样读取到的就是计算后的数字结果。注意: 使用此模式保存文件后,公式可能会丢失,变成纯数值。通常建议读取用 data_only=True,写入时避免使用该模式覆盖原文件。

4. 忘记保存

所有的修改都在内存中进行,直到你执行 wb.save('filename.xlsx') 之前,硬盘上的文件不会有任何变化。

5. 总结与下一步

恭喜你!你已经掌握了 Python 操作 Excel 的核心技能。

回顾一下我们学到的内容:

  • 加载与创建: 使用 load_workbookWorkbook
  • 读写数据: 使用 sheet['A1'] 定位,使用 append 批量写入。
  • 样式美化: 使用 Font, PatternFill, Alignment 让表格更专业。

下一步建议:尝试找一个你工作中真实的 Excel 任务(比如合并三个表格的数据),试着用 Python 脚本来完成它。刚开始写代码可能会比手动操作慢,但一旦脚本写好,以后成百上千次的操作都将瞬间完成。

到此这篇关于Python办公自动化之openpyxl使用与避坑全面指南的文章就介绍到这了,更多相关Python openpyxl内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 在Django的form中使用CSS进行设计的方法

    在Django的form中使用CSS进行设计的方法

    这篇文章主要介绍了在Django的form中使用CSS进行设计的方法,Django是Python重多人气开发框架中最为著名的一个,需要的朋友可以参考下
    2015-07-07
  • Python使用date模块进行日期处理的终极指南

    Python使用date模块进行日期处理的终极指南

    在处理与时间相关的数据时,Python的date模块是开发者最趁手的工具之一,本文将用通俗的语言,结合真实案例,带您掌握date模块的六大核心功能和使用技巧,需要的可以了解下
    2025-03-03
  • 谈谈对Pytorch中的forward的理解

    谈谈对Pytorch中的forward的理解

    这篇文章主要介绍了谈谈对Pytorch中的forward的理解,在Pytorch中,forward方法是一个特殊的方法,被专门用来进行前向传播,本文给大家详细讲解,需要的朋友可以参考下
    2023-04-04
  • caffe的python接口生成配置文件学习

    caffe的python接口生成配置文件学习

    这篇文章主要介绍了caffe的python接口生成配置文件学习,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • python3+PyQt5+Qt Designer实现界面可视化

    python3+PyQt5+Qt Designer实现界面可视化

    本文主要介绍了python3+PyQt5+Qt Designer实现界面可视化,Qt Designer,用鼠标拖拖就能完成窗体设计,感兴趣的可以了解一下
    2021-06-06
  • python使用pymysql实现操作mysql

    python使用pymysql实现操作mysql

    本文给大家讲解的是在python中使用pymysql实现操作mysql的方法汇总,非常的简单实用,有需要的小伙伴可以参考下
    2016-09-09
  • 大数据分析用java还是Python

    大数据分析用java还是Python

    在本篇文章里小编给大家分享了关于java和Python哪个适合大数据分析的相关知识点文章,有需要的朋友们可以学习下。
    2020-07-07
  • Python SQLAlchemy库的使用方法

    Python SQLAlchemy库的使用方法

    这篇文章主要介绍了Python SQLAlchemy库的使用方法,帮助大家更好的利用python处理数据库,感兴趣的朋友可以了解下
    2020-10-10
  • Python中使用partial改变方法默认参数实例

    Python中使用partial改变方法默认参数实例

    这篇文章主要介绍了Python中使用partial改变方法默认参数实例,本文直接给出使用实例,代码中包含详细注释,需要的朋友可以参考下
    2015-04-04
  • Python3中对json格式数据的分析处理

    Python3中对json格式数据的分析处理

    这篇文章主要介绍了Python3中对json格式数据的分析处理,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01

最新评论