目录
-
-
- [🎯 本质上,是借助 Windows 系统中的 **Excel COM 自动化接口(COM Automation)**,让 Excel 自己来"打开并另存"文件。](#🎯 本质上,是借助 Windows 系统中的 Excel COM 自动化接口(COM Automation),让 Excel 自己来“打开并另存”文件。)
- [⚙️ 执行步骤详解:](#⚙️ 执行步骤详解:)
- [✅ 为什么这种方法比 `pandas.read_csv()` 更强?](#✅ 为什么这种方法比
pandas.read_csv()
更强?) - [⚠️ 注意事项](#⚠️ 注意事项)
- [📝 总结](#📝 总结)
-
🎯 本质上,是借助 Windows 系统中的 Excel COM 自动化接口(COM Automation),让 Excel 自己来"打开并另存"文件。
这个接口是微软 Office 提供的一种"程序控制 Office 软件"的标准方式,可以用 Python(通过 win32com
库)或其他语言模拟人手动点击 Excel 的操作。
⚙️ 执行步骤详解:
python
excel = win32com.client.Dispatch("Excel.Application")
这一步的本质是:打开一个隐藏的 Excel 程序进程 ,类似你后台打开了 Excel,但界面不可见(因为设置了 excel.Visible = False
)。
python
workbook = excel.Workbooks.Open(csv_path)
相当于在 Excel 中点击"打开某个文件" 。
注意:这里调用的是 Excel 的"真实打开"功能,因此它会自动解析合并单元格、格式、文本对齐等 Excel 可见信息,这就是为什么这一步能"看到"那些在 CSV 里本来是空白的单元格!
python
workbook.SaveAs(xlsx_path, FileFormat=51)
这是关键一步,相当于你在 Excel 菜单中选择了:
文件 → 另存为 → Excel 工作簿(.xlsx)
这里的 FileFormat=51
就代表 .xlsx
格式(也可以选保存为 .xls
, .pdf
, .csv
, .txt
等,具体格式编号可以查微软文档)。
python
workbook.Close()
excel.Quit()
释放资源,关闭工作簿与 Excel 应用程序。防止内存泄漏或残留进程。
✅ 为什么这种方法比 pandas.read_csv()
更强?
功能 | pandas.read_csv() |
Excel.Open → SaveAs |
---|---|---|
能读取合并单元格中的隐藏数据 | ❌ 不行 | ✅ 行 |
能处理公式、图表、格式 | ❌ 不行 | ✅ 行 |
对 Excel 用户友好 | ⚠️ 要求纯文本结构 | ✅ 兼容原生行为 |
程序是否能完全模拟手动操作 | ❌ 否 | ✅ 是 |
⚠️ 注意事项
- 只能在 Windows 上运行(因为使用 COM)
- 需要 本机安装 Microsoft Excel
- 如果运行时打开 Excel 报错,可能是 Office 没安装完全,或版本不兼容
- 推荐在批处理前先备份数据,防止文件异常被覆盖
📝 总结
自动化 Excel 转换 .CSV
的原理,是让 Excel 自己来"理解"自己的文件格式并执行保存动作,就像你点鼠标操作一样,只不过由 Python 控制。
这正是为什么它能完美保留 Date/time
、合并单元格等 CSV 文件中丢失的信息,而 pandas.read_csv()
做不到。