用 Python 批量改 Excel:openpyxl 文档讲清读写

手工改几十个表格又慢又容易错,会写点 Python 的人都想让程序代劳。openpyxl 就是干这个的:读已有工作簿、写新表、改单元格、调样式、插图表,全都用代码完成。它的官方文档把每个能力配了可复制的片段,从装库到写出第一张带格式的表,跟着走一遍就能上手,也是很多报表脚本的底层依赖,值得每个办公开发者收藏,能省下大量重复劳动。
它解决什么问题
每月要合并几十个分店报表,手工复制粘贴既慢又总串格,月底加班到崩溃。
想给导出的数据自动套表头颜色和边框,却不知道用哪个库,只能手动一个个改。
网上的代码片段零散过时,照抄常常跑不起来还查不出原因,浪费一下午。
核心能力
| 能力 | 具体能做到什么 |
|---|---|
| 读写齐全 | 既能读现有 xlsx,也能从零新建,单元格值随意改不费力,一套搞定 |
| 样式可控 | 字体、颜色、边框、对齐都能用代码设,告别手工一点点调,批量一致 |
| 公式支持 | 写进公式让 Excel 自己算,不必在 Python 里重复造轮子,结果更准 |
| 图表插入 | 支持在表里生成柱状图折线图,报表直接能交差好看,不用切软件 |
| 片段丰富 | 文档每段都带可复制示例,抄改即用少踩坑少绕路,上手极快 |
| 开源免费 | MIT 协议,商用个人用都免费,源码公开可查可审计,放心用在项目里 |

它本质是一个把 Excel 文件结构翻译成 Python 对象的桥
xlsx 其实是 ZIP 包里的一堆 XML,手写几乎不可能。openpyxl 把这些 XML 抽象成 Workbook、Worksheet、Cell 这样的对象,你操作的是”第几行第几列写什么”,库负责把它落成正确的文件格式。理解这层关系后,批量任务就变成循环加赋值:遍历文件夹、读每张表、取出目标列、算完写回,几十个文件几分钟跑完。文档里 loading、saving、cells 几章把这套映射讲得很透,新手照着抄就能跑通第一个脚本,再慢慢加样式与图表,不必懂 XML 也能干活。
要注意它只处理 xlsx,老式 xls 读不了,需要先用别的工具转格式;大文件(几万行以上)用 read_only 模式省内存,否则容易吃光内存。带公式的单元格读出来是公式文本而非计算结果,要数值得在 Excel 里先算过再读。样式和功能繁多,建议按自己真实需求挑着学,别一上来通读整本。把它当工具书,用到哪查到哪最省时间,也最不容易半途而废,遇到具体场景再深入。

同类工具怎么选
| 工具 | 授权 | 差别在哪 |
|---|---|---|
| pandas | 开源免费 | 读表做数据分析更顺手,但写回带样式格式不如 openpyxl 细致,两者常配合用。 |
| xlwings | 开源免费 | 能驱动本机 Excel 自动跑,功能强,但依赖装了 Excel 的环境,服务器上不便。 |
| XlsxWriter | 开源免费 | 专注写新表与图表,不能改已有文件,配 pandas 出图很常用,单向写入首选。 |
谁适合用
- 需要做报表自动化、嫌手工慢的办公人员
- 写小工具帮团队批量处理表格的开发者
- 想把重复填表动作固化成脚本的运维
怎么开始
- 用 pip 安装 openpyxl,确认能正常 import 再开始,环境先理顺。
- 从文档 Quick Start 读起,先写出第一个带表头的工作簿,跑通再说。
- 照 Accessing cells 章练读写单个单元格与区域,把坐标逻辑摸清。
- 用 Styles 章给表头加粗上色,做出像样表头,报表立刻专业。
- 把循环套上去,批量处理文件夹里的多个文件并另存,效率立现。
- 遇到大文件时启用 read_only 模式控内存防卡死,生产环境必备。
常见问题
支持老 xls 吗?
不支持。openpyxl 只处理 xlsx,旧格式请先转成 xlsx 再交给它处理,避免踩坑。
要收费吗?
不用。它以 MIT 开源协议发布,个人与商用都免费,源码公开可查,不用担心授权。
能读公式结果吗?
默认读到的是公式文本;要数值需先在 Excel 算好再读,或用数据工具求值后读。
大文件会卡吗?
几万行建议开 read_only 模式,边读边处理,避免一次性载入撑爆内存,稳定很多。
授权与合规
openpyxl 以 MIT 开源协议发布,官方文档在 Read the Docs 公开,源码在仓库可见,可自由使用与修改,商用个人用都免费,是自动化办公绕不开的一站,值得每个办公开发者收藏。 官网:openpyxl.readthedocs.io。
继续找同类资源
这条属于「学习资料」栏目,同栏目还有更多可直接使用的免费资源,可以在 学习资料全部资源 里按需翻阅。
相关资源
同栏目下这几条也常被一起翻到:
↓ 获取资源
点击按钮直接前往资源页面。