我在python中创建了一个小脚本来生成一个与excel兼容的xml文件(用xls扩展名保存)。该文件是从零件数据库生成的,因此我可以使用提取的数据下订单。
在订购部件的网站上,您可以导入excel文件,以便订单自动填写。这里的问题是,每次我想订单时,我必须打开excel并使用类型为MS Excel 97-2003的xls扩展名保存文件以使导入正常工作。 然后excel文档看起来完全一样,但是当用记事本打开时,我们再也看不到xml,只能看到二进制转储。
有没有办法通过运行bat文件或者在我的python脚本中添加一些行来自动化这个过程,以便以正确的格式转换它?
(我知道之前已经问过这个问题,但从未得到过回答)
答案 0 :(得分:5)
有两种基本方法。
您询问了第一个问题:自动执行Excel以打开并保存文件。实际上有两种方法可以 。第二种是使用Python工具,可以在没有Excel帮助的情况下直接在Python中创建文件。所以:
Excel旨在通过COM自动化由外部应用程序控制。 Python在pywin32
内部有一个很棒的COM自动化接口。不幸的是,pywin32
上的文档并不是很好,Excel的COM自动化界面上的所有文档都是用C语言编写的,用于JScript,VB,.NET或原始COM。幸运的是,有很多关于这个网站关于使用win32com
来驱动Excel,例如this one,所以你可以自己弄明白。它看起来像这样:
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框。我依稀记得有越来越访问FILEFORMAT名来自win32com,只是撑船仰起脸当量数(快速谷歌为“FILEFORMAT xlExcel8”显示,数值相当于是56的问题,并确认这是为97-2003正确的格式二进制xls)。
当然,如果您不需要在Python中执行此操作,MSDN在JScript,VBA等中充满了很好的示例。
您需要的文档全部在MSDN上(因为Office Developer Network for Excel已合并到MSDN中,然后显然成为了404页)。 Excel的顶级页面是Welcome to the Excel 2013 developer reference(如果你想要一个不同的版本,请点击导航内容中的“Office客户端开发”并选择一个不同的版本),你最关心的是{{ 3}}。您还可以在Excel的内置帮助中找到相同的文档(通常链接到完全相同的网页)。例如,您可以在那里发现Object model reference对象具有Workbooks
属性,该属性是Application
对象,具有Open
和Add
方法返回Workbooks
对象,该对象具有SaveAs
方法,该方法采用类型为Workbook
的可选FileFormat
参数,其值为xlExcel8
= {{1 }}
正如我之前暗示的那样,由于我不再记得的某些原因,您可能无法访问56
之类的枚举值,但您可以在MSDN(或只是Google)上查看价值并将其放入而不是56号。
其他文档(这里和MSDN中的其他文档)通常是您可以自己猜测的内容,或者与xlExcel8
无关的内容。遗憾的是,已经稀疏的win32com
文档希望您已经阅读了该文档 - 但幸运的是,这些示例足以让您在几乎所有对象模型之外徘徊。
在Windows上自动化GUI是一个巨大的痛苦,但是有许多工具可以使它变得更加容易,例如XlFileFormat
。您可以使用pywinauto
为您编写win32com
脚本。
如果您不需要在Python中执行此操作,则swapy
等单独的脚本系统会拥有更大的用户群,甚至还有更多示例可让您的生活更轻松。
pywinauto
,AutoIt
的一部分,可以完成您想要的操作,而无需触及Excel。