从python 3.x编写excel 2003文件

我有一个非常大的CSV数据集(数百万条logging)。 我已经过滤和按摩,并将这个列表分割成一个客户端规范。 这全部在Python3.3中完成

最后一个要求是这些分割列表以Excel格式保存。 他们有一个实用工具,在进行一些计算并检查数据库中现有的重复项后,将Excel电子表格(以特定格式)导入到其数据库中。 我的问题是,他们的实用工具只能在Excel 2003的.xls文件…我不知道这个提前。

所以我已经可以使用OpenPyXl以正确的格式为Excel 2007写入数据,但是这些文件不起作用。 我可以写CSV文件,但这些都不起作用,他们的import商需要xls文件。 也许有一种方法批量转换所有文件从Excel 2007 xlsx格式xls格式,或从csv格式xls格式? 有成千上万的文件,所以不能手工完成。

最好的办法是将它们以正确的格式输出,但我似乎无法find与Excel 2003格式兼容的Python 3兼容方式。 xlwt是python 2.x只。

有没有人有build议,我可以完成这个?

编辑:这是解决scheme的样子。

编辑2:添加工作簿closures由stencibuild议。

import os import errno import glob import time import win32com.client def xlsx_to_xls(path): xlsx_files = glob.glob(path+'\\*.xlsx') if len(xlsx_files) == 0: raise RuntimeError('No XLSX files to convert.') xlApp = win32com.client.Dispatch('Excel.Application') for file in xlsx_files: xlWb = xlApp.Workbooks.Open(os.path.join(os.getcwd(), file)) xlWb.SaveAs(os.path.join(os.getcwd(), file.split('.xlsx')[0] + '.xls'), FileFormat=1) xlWb.Close() xlApp.Quit() time.sleep(2) # give Excel time to quit, otherwise files may be locked for file in xlsx_files: os.unlink(file) 

使用Excel 2007打开它们,并将它们保存为Excel 2003.您可以使用简单的VBAmacros或Python,而无需向用户显示Excel应用程序。 唯一的问题是你的电脑需要使用Excel。

这里是VBA代码:

 Sub ConvertTo2003(FileName As String) Dim WB As Workbook Set WB = Workbooks.Open(FileName, ReadOnly:=True) WB.SaveAs Replace(FileName, ".xlsx", ".xls"), FileFormat:=xlExcel8 WB.Close End Sub 

这里是Python代码:

 xlApp = Excel.ExcelApp(False) xlApp.convertTo2003('FileName.xlsx') class ExcelApp(object): def __init__(self, visible): self.app = win32com.client.Dispatch('Excel.Application') if visible: self.app.Visible = True def __exit__(self): self.app.Quit() def __del__(self): self.app.Quit() def convertTo2003(self, fileName): if self.app: wb = self.app.WorkBooks.Open(fileName, ReadOnly = True) wb.SaveAs(fileName[:-1], FileFormat = 56) wb.Close() def quit(self): if self.app: self.app.Quit()