news 2026/10/29 23:46:08

Python 自动化办公实战:用 openpyxl 批量处理 Excel 表格,告别重复手工操作

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python 自动化办公实战:用 openpyxl 批量处理 Excel 表格,告别重复手工操作

前言

在日常工作中,很多小伙伴每天都要花费大量时间处理 Excel 表格:批量修改单元格内容、合并多个工作表、统计数据、设置单元格样式。重复的复制粘贴、筛选统计枯燥又容易出错,当表格数量达到几十上百份时,纯手工操作几乎难以完成。Python 作为一门简单易上手的编程语言,搭配 openpyxl 库,可以高效实现 Excel 自动化。本文就从环境安装到完整实战案例,手把手教大家使用 openpyxl 处理 xlsx 格式文件,读完你就可以直接修改代码用到自己工作场景。

注意:openpyxl 仅支持.xlsx 格式,不支持老版本.xls 文件,如果需要处理 xls 文件,可以使用 xlrd 库。

一、环境准备

首先确认已经安装 Python 环境,推荐 Python3.8 及以上版本。打开终端或者 cmd,执行 pip 命令安装 openpyxl:

pip install openpyxl

安装完成后,我们就可以开始编写代码。openpyxl 核心包含三个对象:Workbook 工作簿对象,对应一个 Excel 文件;Worksheet 工作表对象,对应文件里的 sheet;Cell 单元格对象,对应表格里的单个格子。理解这三个对象,基本就掌握了 openpyxl 的核心逻辑。

二、基础操作:新建 Excel,写入数据

先来最简单的示例,新建一个 Excel 文件,创建工作表,写入基础数据。

from openpyxl import Workbook # 创建工作簿 wb = Workbook() # 获取默认工作表 ws = wb.active # 修改工作表名称 ws.title = "员工信息" # 写入单行数据 ws["A1"] = "姓名" ws["B1"] = "部门" ws["C1"] = "薪资" # 按行批量写入 data_list = [ ["张三", "研发部", 12000], ["李四", "市场部", 9000], ["王五", "财务部", 8500] ] for row in data_list: ws.append(row) # 保存文件 wb.save("员工信息表.xlsx")

运行代码之后,当前目录会生成员工信息表.xlsx。除了用 A1 这种坐标,也可以使用ws.cell(row=2,column=1,value="张三"),通过行号列号写入数据,在循环处理大量数据时更加方便。

三、实战案例:读取已有 Excel,批量统计薪资总和

工作中经常需要读取已有的表格,读取数据之后做统计。假设我们上面生成的员工信息表,现在需要读取所有员工薪资,计算总薪资、平均薪资。

from openpyxl import load_workbook # 加载已有文件,read_only=False代表可读写 wb = load_workbook("员工信息表.xlsx") ws = wb["员工信息"] salary_sum = 0 count = 0 # 从第二行开始遍历,跳过表头第一行 for row in ws.iter_rows(min_row=2, values_only=True): name, dept, salary = row salary_sum += salary count +=1 avg_salary = salary_sum / count print(f"员工总薪资:{salary_sum},平均薪资:{avg_salary:.2f}") # 将统计结果写入表格末尾 ws[f"A{count+3}"] = "合计" ws[f"C{count+3}"] = salary_sum wb.save("员工信息表.xlsx")

iter_rows是非常好用的方法,values_only=True代表只获取单元格的值,不需要单元格对象,减少内存占用。如果表格数据量上万行,推荐开启只读模式load_workbook(filename, read_only=True)提升运行速度。

四、进阶:设置单元格字体、边框样式

导出报表的时候,往往需要美化表格,设置表头加粗、字体颜色、单元格边框。openpyxl 的 styles 模块可以实现样式自定义。

from openpyxl.styles import Font, Border, Side # 定义字体样式:加粗,字号12 header_font = Font(bold=True, size=12) # 定义边框 thin_border = Border(left=Side(style='thin'), right=Side(style='thin'), top=Side(style='thin'), bottom=Side(style='thin')) # 设置A1:C1表头样式 for col in ["A","B","C"]: cell = ws[f"{col}1"] cell.font = header_font cell.border = thin_border wb.save("员工信息表.xlsx")

五、常见踩坑总结

  1. 文件打开占用问题:代码保存 Excel 的时候,一定要关闭 Excel 文件,否则会报权限错误;
  2. 格式限制:openpyxl 不支持 xls,如果是 xls 文件,需要转换或者更换库;
  3. 大数据性能:几万行数据不要直接读写全部单元格,优先使用 iter_rows + 只读模式;
  4. 公式:读取表格的时候,默认拿到的是公式结果,不是公式文本。

六、结语

Python+openpyxl 自动化 Excel,核心思路就是把人工的操作转换成代码循环。掌握这套方案之后,你可以扩展更多场景:批量拆分 Excel、多文件数据汇总、自动生成周报。很多人觉得编程很难,但办公自动化是 Python 最容易落地的场景。不用精通全部语法,只需要学会对应库的基础 API,就能解放双手,把时间留给更有价值的工作。后续我还会分享 Python 处理 Word、PPT 自动化的案例,感兴趣可以关注。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/25 21:08:48

Agent 任务中断后如何续跑?Caravel 同一会话接着聊实操(附三步截图)

摘要: CLI Agent 做到一半被打断,第二天重开终端只能重讲背景。本文演示 Caravel 把会话挂在任务上的做法:工作台找到原任务 → 打开后计划和历史仍在 → 输入框补一句从同一会话续跑。关掉的是窗口,不是任务。写在前面 产品&…

作者头像 李华
网站建设 2026/10/25 20:41:24

嵌入式电源路径保护:电子保险丝TPS259483与MCU协同设计方案

1. 电源路径保护为什么成了嵌入式设计里的老大难1.1 一个看起来不起眼、炸起来很要命的问题做嵌入式硬件的人,应该都有过这样的经历:整板调试通通正常,代码跑得欢天喜地,结果现场一接负载,电源啪一下掉电,或…

作者头像 李华
网站建设 2026/10/13 11:05:59

电子保险丝与MCU协同的工业电源保护方案设计

最近在给一块工业控制板做电源保护升级,核心器件选的是TPS259483AYWPR这颗电子保险丝和PIC18F47K42单片机。整套系统调完之后,最大的感受是:以前生怕负载短路烧板子,现在反而希望它短路一次,看看保护动作有多利落。这个…

作者头像 李华
网站建设 2026/10/13 0:33:05

REDox:用64位token压缩结构化数据内存占用

1. 当结构化数据遇上64位token:REDox到底在解决什么问题第一次看到REDox这个项目,是在一个数据密集型应用的性能优化讨论里。当时我们团队正在处理一个日志分析系统,每天要吞下几十GB的半结构化数据,内存占用一直是个绕不过去的坎…

作者头像 李华
网站建设 2026/10/29 9:56:03

eFuse+MCU实现工业电源路径保护:从选型到固件实战

在工业控制、嵌入式设备这类项目里,电源路径保护从来不是“加个保险丝”就能交差的。输入端可能来浪涌,负载端可能短路,后级一堆电解电容上电瞬间的充电电流能把普通保护电路直接打穿。我最近调完一套用 TPS259483AYWPR 做电源开关与保护、MK…

作者头像 李华
网站建设 2026/10/13 4:17:20

高配≠合适:半导体工控机选型必读的五大场景与避坑指南

做半导体设备这些年,我经常被客户一张配置单问住:“你看这台工控机,i9处理器、64G内存、双显卡,顶配了吧?是不是全产线都能用?”每到这种时候我都想摇头。半导体工控选型要是比配置高低这么简单&#xff0c…

作者头像 李华