Python操作Excel:常用库对比与实践指南
前言
在 Python 生态中,有多个库可以操作 Excel 文件,每个库都有其适用场景。本文将对比介绍 5 个常用的 Excel 操作库,帮助你在不同场景下选择最合适的工具。
一、库对比总览
| 库 | 适用格式 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|---|
| openpyxl | .xlsx | API 简洁、纯 Python | 不支持 .xls | 常规读写操作 |
| xlwings | .xlsx/.xls | 可调用 Excel 计算引擎 | 依赖 Excel 软件 | 需要公式重算 |
| win32com | .xlsx/.xls | 功能最强大 | 仅 Windows、依赖 COM | 复杂公式、循环引用 |
| xlrd | .xls | 轻量、速度快 | 不支持 .xlsx(新版本) | 读取旧版 .xls 文件 |
| Spire.XLS | .xlsx/.xls | 功能全面、API 优雅 | 免费版有水印限制 | 跨工作簿操作 |
二、openpyxl —— 日常首选
特点:纯 Python 实现,无需安装 Excel,API 简洁直观。
1 | import openpyxl |
常用操作:
1 | # 获取所有表名 |
适用场景:常规的数据读写、批量处理、生成报表。
三、xlwings —— 触发公式计算
特点:在后台调用 Excel 应用,可以触发公式重算。
问题场景:使用 openpyxl 读取带有公式的单元格时,可能获取到的是公式文本而非计算结果。
1 | import xlwings as xw |
适用场景:需要获取公式计算结果、处理跨表引用。
四、win32com —— 处理复杂场景
特点:通过 COM 接口直接控制 Excel,功能最强大,但仅支持 Windows。
1 | import win32com.client |
适用场景:
- 处理循环引用公式
- 需要完整的 Excel 计算引擎
- 处理复杂的 Excel 属性设置
五、xlrd —— 读取旧版 .xls
特点:轻量级,专门用于读取 .xls 格式(Excel 97-2003)。
1 | import xlrd |
注意:xlrd 2.0+ 版本已移除对
.xlsx的支持,如需读取.xlsx请使用 openpyxl。
适用场景:只需要读取旧版 .xls 文件。
六、Spire.XLS —— 功能最全面
特点:商业级库,API 优雅,支持复杂操作(如跨工作簿复制工作表)。
1 | from spire.xls import Workbook |
局限性:
- 免费版有文件大小限制
- 免费版会在输出文件中添加水印工作表
适用场景:需要跨工作簿复制工作表、保留复杂样式和图片。
七、实战建议
如何选择?
1 | 需要读写 .xlsx 文件? |
常见坑点
1. 公式单元格读取为空
问题:openpyxl 读取带公式的单元格时返回 None。
解决:使用 data_only=True 参数,或改用 xlwings/win32com。
1 | # openpyxl 方式(需要文件已被 Excel 打开并保存过) |
2. WPS 与 Excel 的差异
问题:某些库在 WPS 环境下可能出现样式错乱、打印错位等问题。
建议:
- 生产环境建议使用 Microsoft Excel
- 打印预览时选择 “Microsoft Print to PDF” 而非 WPS 打印机
3. 文件中的图片处理
问题:openpyxl 处理嵌入图片时可能丢失或错位。
建议:需要保留图片的场景,优先考虑 Spire.XLS 或 win32com。
4. 打印设置
通过代码设置打印参数:
1 | # win32com 设置打印居中 |
八、总结
| 场景 | 推荐库 |
|---|---|
| 日常数据读写 | openpyxl |
| 需要公式计算结果 | xlwings / win32com |
| 读取旧版 .xls | xlrd |
| 跨工作簿复制(含图片样式) | Spire.XLS |
| 循环引用、复杂计算 | win32com |
选择合适的工具,可以大大提高 Excel 自动化处理的效率和稳定性。
参考资料
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 ezhpry's blog!
评论