xlwt:纯 Python 生成 Excel 文件,零依赖

Python 生态里操作 Excel 的库不少,xlwt 是其中比较老牌的一个,目前 Star 数 1,045 颗。它的定位很明确:生成 Microsoft Excel 95 到 2003 兼容的 .xls 文件。

这个库最大的特点是纯 Python 实现,不依赖任何第三方包。只要你有 Python 标准库就能跑,安装部署没有任何额外的环境负担。

正文顶部截图

能做什么

xlwt 的核心能力是往 Excel 单元格里写数据,同时支持格式化。字体、颜色、数字格式、日期格式、单元格合并,这些常见的表格样式都能搞。代码里还能写 Excel 公式,打开生成的文件后公式会自动计算。

库本身提供了一组简单直接的 API。创建 Workbook、添加 Sheet、往单元格写数据、保存文件,四步完事。格式化样式通过 easyxf 方法来设置,支持字体名称、颜色、粗体、下划线,也支持数字格式字符串,用起来和 Excel 里的自定义格式差不多。下面是个完整例子:

import xlwt
from datetime import datetime

style0 = xlwt.easyxf('font: name Times New Roman, color-index red, bold on',
    num_format_str='#,##0.00')
style1 = xlwt.easyxf(num_format_str='D-MMM-YY')

wb = xlwt.Workbook()
ws = wb.add_sheet('A Test Sheet')

ws.write(0, 0, 1234.56, style0)
ws.write(1, 0, datetime.now(), style1)
ws.write(2, 0, 1)
ws.write(2, 1, 1)
ws.write(2, 2, xlwt.Formula("A3+B3"))

wb.save('example.xls')

安装也简单,pip 一行就够:

pip install xlwt

README区域截图

为什么还在用 xlwt

坦白讲,xlwt 只支持 .xls 格式(Excel 2003 及更早版本),不支持 .xlsx。如果你需要处理新格式,openpyxl 或 xlsxwriter 更合适。那为什么还有人用?

三个原因:

  1. 零依赖。 纯 Python 标准库实现,不引入任何第三方包。打出的二进制文件里塞一个 xlwt 完全不费劲,服务器部署也不用操心底层 C 库兼容性问题。

  2. 够简单。 API 设计直白,没有复杂抽象。几行代码出结果,学习成本几乎为零。

  3. 老系统兼容。 很多企业内部系统还在用 .xls 格式,xlwt 在这些场景下是个稳定的选择。

xlwt 是 pyExcelerator 的分支,原作者 Roman V. Kiseliov 开发了 pyExcelerator,xlwt 在此基础上做了大量改进。它的公式编译器用了 ANTLR 2.7.7 来生成,表格样式系统也相当完整。

适合谁

如果你的需求是给 legacy 系统生成 .xls 文件,或者在嵌入式环境里跑 Excel 导出,xlwt 很合适。文档在 docs 目录里能找到,Read the Docs 上也有完整版,遇到问题去 python-excel 的 Google Group 提问就行。

不过如果你要处理 .xlsx 或者需要读取 Excel 文件,xlwt 不合适。它只写 .xls,不支持读取。这种场景可以搭配 xlrd 一起用,或者直接上 openpyxl。

总体来看,xlwt 定位精准:不追求大而全,就做好一件事:用纯 Python 生成老版本 Excel 文件。在这个细分领域,它做得干净利落。

另外提一句,xlwt 的文档不算特别详尽,但 examples 目录里有很多实际用例,配合源码阅读基本能解决大部分问题。如果遇到实在搞不定的情况,python-excel 的 Google Group 里提问一般也都能得到回复。对于一个维护了多年的老项目来说,社区虽然不大,但足够可靠。

n-excel 的 Google Group 里提问一般也都能得到回复。对于一个维护了多年的老项目来说,社区虽然不大,但足够可靠。

更多推荐