在 Python 自动化办公场景中,Excel 文件的格式转换是一项高频需求。尤其是早期版本的 .xls(Excel 97-2003)与当前通用的 .xlsx(Excel 2007及以上)之间的互转,经常出现在数据迁移、遗留系统对接、批量报表处理等任务中。

传统做法通常依赖本地安装的 Microsoft Excel 组件(如通过 win32com 调用 COM 接口),但这种方式存在明显局限:在 Linux 服务器或无图形界面的 Docker 环境中无法运行,且容易因 Excel 进程残留或版本差异引发不稳定问题。
本文介绍一种不依赖 Microsoft Office 的替代方案——使用 Spire.XLS for Python 库,以纯 Python 代码完成 .xls 与 .xlsx 的双向转换,并探讨其适用性与注意事项。
该库支持 Python 3.6 及以上版本,可在 Windows、Linux、macOS 上运行。通过 pip 完成安装:
复制代码pip install Spire.XLS
安装过程中会自动下载所需的依赖包,无需额外配置系统环境变量。
Spire.XLS 的 API 设计遵循“加载→处理→保存”的经典模式。Workbook 类作为文档容器,负责读取源文件和写入目标文件;ExcelVersion 枚举则用于指定输出的 Excel 格式版本。
复制代码from spire.xls import *
from spire.xls.common import *# 实例化 Workbook 对象
workbook = Workbook()# 加载旧版 .xls 文件
workbook.LoadFromFile("legacy_data.xls")# 另存为 .xlsx 格式(使用 Excel 2016 版本规范)
workbook.SaveToFile("converted_data.xlsx", ExcelVersion.Version2016)# 释放资源
workbook.Dispose()
反向操作只需修改 SaveToFile 的目标版本参数:
复制代码from spire.xls import *
from spire.xls.common import *workbook = Workbook()# 加载新版 .xlsx 文件
workbook.LoadFromFile("modern_data.xlsx")# 另存为 .xls 格式(Excel 97-2003 兼容版本)
workbook.SaveToFile("legacy_output.xls", ExcelVersion.Version97to2003)workbook.Dispose()
ExcelVersion.Version97to2003:对应 .xls 格式,最大行数限制为 65,536 行,列数限制为 256 列。ExcelVersion.Version2016:对应 .xlsx 格式,支持 1,048,576 行和 16,384 列,同时支持更多高级特性(如条件格式、图表等)。转换时需注意目标格式的容量上限,若源文件数据量超出旧版格式限制,转换过程可能会报错或自动截断。
除了 Excel 内部格式转换,该库也支持 Excel 工作表与 CSV 文件之间的双向操作,这在跨系统数据迁移场景中较为实用。
复制代码# 将工作表保存为 CSV 文件,指定分隔符和编码
sheet = workbook.Worksheets[0]
sheet.SaveToFile("output.csv", ",", Encoding.get_UTF8())
反向操作同样支持从 CSV 文件加载数据并保存为 Excel 格式,处理逻辑与前述一致。
.xls 格式时可能出现不兼容。| 方案 | 优点 | 缺点 |
|---|---|---|
openpyxl + xlrd/xlwt | 开源免费,社区活跃 | 需组合多个库,.xls 与 .xlsx 读写库不统一 |
pandas + 底层引擎 | 数据分析场景无缝集成 | 转换过程中丢失样式信息 |
| 本文所用方案 | 统一 API,保留样式,无需 Office | 免费版有水印,商业场景需付费 |
选择何种工具,取决于项目对样式保留、开发速度、成本预算和运行环境的综合要求。
Spire.XLS for Python 提供了一套独立于 Microsoft Office 的 Excel 格式转换能力,其直观的 API 设计使得 .xls 与 .xlsx 互转仅需数行代码即可完成。对于运行在 Linux 服务器或容器化环境中的自动化任务,该方案在稳定性和部署便利性上具有一定优势。
然而,任何工具都有其适用边界。建议在实际项目中使用前,先用典型规模的测试文件进行转换测试,重点关注数据完整性、样式一致性以及性能指标,以确认其是否满足具体业务需求。