3

我在 python 中创建了一个小脚本来生成一个与 excel 兼容的 xml 文件(以 xls 扩展名保存)。该文件是从零件数据库生成的,因此我可以使用提取的数据下订单。

在订购零件的网站上,您可以导入 excel 文件,以便自动填写订单。这里的问题是,每次我想下订单时,我都必须打开 excel 并使用类型为 MS Excel 97-2003 的 xls 扩展名保存文件才能使导入工作。excel 文档看起来完全一样,但是当用记事本打开时,我们看不到 xml,只有二进制转储。

有没有办法通过运行 bat 文件或在我的 python 脚本中添加一些行以便将其转换为正确的格式来自动化这个过程?

(我知道以前有人问过这个问题,但从来没有回答过)

4

1 回答 1

5

对此有两种基本方法。

您询问了第一个问题:自动化 Excel 以打开和保存文件。实际上有两种方法可以做到这一点。第二种是使用 Python 工具,无需 Excel 的帮助就可以直接在 Python 中创建文件。所以:

1a:通过其自动化界面自动化 Excel。

Excel 旨在通过 COM 自动化由外部应用程序控制。Python 在pywin32. 不幸的是,pywin32关于 Excel 的 COM 自动化接口的所有文档都是为 JScript、VB、.NET 或 C 中的原始 COM 编写的。幸运的是,该站点上有许多关于使用win32comto驱动 Excel,比如这个,所以你可能可以自己弄清楚。它看起来像这样:

import win32com.client
excel = win32com.client.Dispatch('Excel.Application')
spreadsheet = excel.Workbooks.Open('C:/path/to/spreadsheet.xml')
spreadsheet.SaveAs('C:/path/to/spreadsheet.xls', fileformat=excel.xlExcel8)

这没有以任何方式进行测试,因为我手边没有带有 Excel 的 Windows 框。而且我隐约记得从 win32com 访问文件格式名称时遇到问题,只是在查找和查找等效数字时遇到了问题(“fileformat xlExcel8”的​​快速谷歌显示等效数字为 56,并确认这是 97-2003 的正确格式二进制文件)。

当然,如果你不需要在 Python 中做,MSDN 中充满了 JScript、VBA 等方面的优秀示例。

您需要的文档都在MSDN上(因为Excel 的 Office Developer Network已合并到 MSDN,然后显然变成了 404 页面)。Excel 的顶级页面是Welcome to the Excel 2013 developer reference(如果您想要不同的版本,请单击上面导航中的“Office 客户端开发”并选择不同的版本),您最关心的是对象模型参考。您还可以在 Excel 的内置帮助中找到相同的文档(通常链接到完全相同的网页)。例如,你会发现Application对象有一个Workbooks属性,它是一个Workbooks对象,它有OpenAdd方法返回一个Workbook对象,它有一个SaveAs方法,该方法接受一个可选FileFormat参数 type XlFileFormat,其值为xlExcel8= 56

xlExcel8正如我之前暗示的那样,由于某种我不再记得的原因,您可能无法访问枚举值,但您可以在 MSDN 上查找该值(或只是谷歌它)并输入数字 56。

其他文档(此处和 MSDN 中的其他地方)通常要么是您自己猜到的东西,要么是与win32com. 不幸的是,已经很稀少的win32com文档希望您已经阅读过该文档——但幸运的是,这些示例足以让您在除了对象模型之外的几乎所有内容中一头雾水。

1b:通过其 GUI 自动化 Excel。

在 Windows 上自动化 GUI 是一个巨大的痛苦,但有许多工具可以让它变得更容易,例如pywinauto. 您也许可以只使用为您swapy编写pywinauto脚本。

如果您不需要在 Python 中执行此操作,那么单独的脚本系统(如AutoIt拥有更大的用户群和更多示例)可以让您的生活更轻松。

2:全部用 Python 完成。

xlutilspython-excel的一部分,也许可以做你想做的事,根本不用接触 Excel。

于 2013-01-18T21:14:12.097 回答