Spe*_*ccy 3 python windows excel xls ms-office
我在python中创建了一个小脚本来生成一个excel兼容的xml文件(以xls扩展名保存)。该文件是从零件数据库生成的,因此我可以使用提取的数据下订单。
在订购零件的网站上,您可以导入excel文件,以便自动执行订单。这里的问题是,每次我要下订单时,都必须打开excel并以MS Excel 97-2003类型的xls扩展名保存文件,以使导入正常进行。excel文档看上去完全一样,但是用记事本打开时,我们再也看不到xml了,只能看到二进制转储。
有没有一种方法可以通过运行bat文件或向我的python脚本中添加一些行以使其以正确的格式转换来自动执行此过程?
(我知道以前曾有人问过这个问题,但从未回答过)
有两种基本方法。
您询问第一个问题:自动化Excel以打开并保存文件。实际上,有两种方法可以做到这一点。第二种方法是使用Python工具,而无需Excel的帮助即可直接在Python中创建文件。所以:
Excel旨在通过COM自动化由外部应用程序控制。Python在中有一个很棒的COM自动化接口pywin32
。不幸的是,关于该文档的文档pywin32
并不是很好,并且Excel的COM自动化界面上的所有文档都是针对JScript,VB,.NET或C语言中的原始COM编写的。幸运的是,此站点上存在许多有关使用以下win32com
命令的问题:驱动Excel,例如this,这样您就可以自己弄清楚。它看起来像这样:
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)
Run Code Online (Sandbox Code Playgroud)
这没有经过任何测试,因为我没有方便使用Excel的Windows框。而且我隐约记得在从win32com上访问文件格式名称时遇到问题,只是打孔并查找等效数字(“ fileformat xlExcel8”的快速google显示等效数字为56,并确认这是97-2003的正确格式二进制xls)。
当然,如果您不需要使用Python进行操作,则MSDN中到处都是JScript,VBA等的出色示例。
您需要的文档全部在MSDN上(因为Excel的Office开发人员网络已合并到MSDN,然后显然变成了404页)。Excel的顶层页面欢迎使用Excel 2013开发人员参考(如果需要其他版本,请在上方导航栏中单击“ Office客户端开发”,然后选择其他版本),而您最关心的是对象模型参考。您还可以在Excel的内置帮助中找到相同的文档(通常是指向完全相同的网页的链接)。例如,您可以在其中发现Application
对象具有Workbooks
属性,该属性是一个Workbooks
对象,并且具有Open
和Add
方法可以返回一个Workbook
对象,该对象具有一个SaveAs
方法,该方法采用FileFormat
type 的可选参数XlFileFormat
,该参数的值xlExcel8
= 56
。
就像我之前暗示的那样,由于xlExcel8
某些我不再记得的原因,您可能无法访问枚举值,但是您可以在MSDN(或只是Google)上查询该值,然后将其改为56。
其他文档(在MSDN的此处和其他位置)通常是您可以自己猜到的东西,或者是与无关的东西win32com
。不幸的是,已经稀疏的win32com
文档希望您阅读该文档,但是幸运的是,这些示例足以使您了解除对象模型之外的几乎所有内容。
在Windows上自动化GUI的工作非常艰巨,但是有许多使它更简单的工具,例如pywinauto
。您也许可以只用来为您swapy
编写pywinauto
脚本。
如果您不需要使用Python进行操作,那么单独的脚本系统(例如,AutoIt
拥有更大的用户群和更多的示例)可以使您的生活更轻松。
xlutils
,是python-excel的一部分,也许可以做您想做的事,而完全不用触摸Excel。