文章目录
- [xlutils:Python 操作 Excel 的胶水层,272 Star 但真管用](#xlutils:Python 操作 Excel 的胶水层,272 Star 但真管用)
xlutils:Python 操作 Excel 的胶水层,272 Star 但真管用
Python 生态里处理 Excel 文件,xlrd 管读,xlwt 管写,这两个库用的人不少。但现实中的需求经常卡在读写之间:想把一个 Excel 复制一份再改几个单元格保存,想从几千行的大表里按条件筛出部分数据生成新文件,想检测一张表有效数据到底占了多少行。这些事在 Excel 软件里点几下就行,落到代码里却要写一堆胶水逻辑。
xlutils 就是来填这个坑的。它在 xlrd 和 xlwt 之间架了座桥,把六个高频场景封装成了独立模块,pip 装完就能用。

六个模块,各管一摊
xlutils.copy:把 xlrd 的 Book 对象复制成 xlwt 的 Workbook。这是整个库的核心。有了它,你可以在不碰原始文件的前提下,读取 Excel、修改数据、另存为新文件,三步走完。
xlutils.save:将 xlrd.Book 直接序列化回 xls 文件。和 copy 搭档使用,补全了读改写的闭环。
xlutils.filter:一个轻量的过滤框架,按条件筛选行或列,输出到新 Excel。处理报表拆分、数据清洗时会派上用场。
xlutils.styles:解析 xls 文件的格式定义,把样式信息转成可操作的数据结构。如果你需要保留原文件的字体、边框、背景色,这个模块是绕不开的。
xlutils.display:以安全易读的方式打印 xlrd 对象的内容,调试阶段查看单元格数据、类型、格式时很好用。
xlutils.margins:检测 Excel 表中实际有数据的边界。比如一张表只填了 150 行,但 xls 文件标记的行数是 65536,这个工具能帮你定位真实数据范围,避免遍历空行浪费性能。

六个模块看着不少,但实际用的时候通常只需要 copy 和 save 两个就够。读一个 xls 模板,改几个单元格,另存为新文件,这个场景占了日常需求的绝大部分。filter 在处理批量拆分时会用到,margins 在你不确定数据范围的脏表里能派上用场,剩下的模块按需引入就行。
功能不贪,场景明确
这个库从 2008 年维护到 2015 年,七年时间里功能范围一直没膨胀。它没有试图做成 Excel 全家桶,就是老老实实解决 xlrd 和 xlwt 之间的衔接缺口。
举例来说,最常见的场景是读一个 xls 模板文件,改几个单元格,再保存为新文件。用 xlutils 来做,几行代码就够了:先用 xlrd 打开文件,用 copy 模块把 Book 转成可写的 Workbook,改完数据后用 save 写回磁盘。整个过程没有多余的概念,每个步骤都有明确的对应关系。
安装和许可
一行命令搞定:
pip install xlutils
协议用的是 MIT,商业项目里也可以放心用。原作者是 Simplistix Ltd,从 2008 年一路维护到 2015 年。虽然之后没有再更新,但考虑到 xls 格式本身就早已稳定,功能完整性没有硬伤。
适合谁用
272 个 Star 放在开源项目里不算亮眼,但对于工具型项目,这个数字跟实际价值关系不大。判断是否适合你就两条:第一,你的项目已经在用 xlrd 和 xlwt 了;第二,你处理的文件格式是 xls。
有一点需要提前知道:xlwt 只支持 xls 格式,所以 xlutils 也只能处理 xls。如果你日常打交道的都是 xlsx,这套工具链使不上劲。但 xls 在财务报表、工业设备导出、老旧系统对接这些场景里依然大量存在,xlutils 在这些场景下就是一个值得备上的工具。
导出、老旧系统对接这些场景里依然大量存在,xlutils 在这些场景下就是一个值得备上的工具。