用python填充excel文件搞乱了我的date

这里是过程,我有一个名为模板的xlsm文件,在一个名为data的工作表中。 然后我有5个Csv文件,我必须把所有csv文件的内容放在数据工作表中。

没有问题,除了如果date是“07/09/12”,将成为“09/07/12”在Excel中。

所以我有一个名为数据的列表,这里是其中一行的打印

['07/09/12', 'LARO', 'MEDITERRAN', '245', 'UZES', '11', '0', '0', '0', '0', '11', '0'] 

我把这段代码放在excel文件中:

首先我打开这个文件(xl是因为我用“with self as xl”)

 def open(self): self.xl.Visible = 1 self.xl.ScreenUpdating = False self.worksheet = self.xl.Workbooks.Open(self.getOutputFile()) 

然后我删除数据工作表

 def cleanData(self): sheet = self.xl.Sheets(self.sheetName) def findNumberOfLines(start_line): nb = 0 while sheet.Cells(start_line + nb, self.startColumn).Value is not None: nb += 1 return nb 

然后我填写数据

 def fillData(self): sheet = self.xl.Sheets(self.sheetName) noRow = self.startLine for row in self.data: noCol = self.startColumn for i, value in enumerate(row): sheet.Cells(noRow, noCol).Value = value noCol+=1 noRow+=1 

我保存

 def save(self): self.worksheet.Save() 

每天都是好的,除了date和月份在excel里面倒置(它不显示美国格式,它显示欧元格式,月份和date倒置(10月3日成为3月9日,使用“长date”格式testing)

奇怪的事情:包含date的Excel单元格设置为“标准”,但一旦它已由我的Python脚本提交它设置为“date”

当填写工作表的替代方法我拦截每个date,并将它们转换为date时间,Excel似乎喜欢那样

 def fillData(self): sheet = self.xl.Sheets(self.sheetName) noRow = self.startLine pattern = re.compile('^\d+/\d+/\d+$') for row in self.data: noCol = self.startColumn for i, value in enumerate(row): if (pattern.match(str(value))): date = value.rsplit('/') sheet.Cells(noRow, noCol).Value = datetime(int(date[2]), int(date[1]), int(date[0])) else: sheet.Cells(noRow, noCol).Value = value noCol+=1 noRow+=1 

除非你告诉Excel,它会试着用date来“智能”,这意味着它会猜测格式是什么以及如何显示转换的date。

在几乎所有情况下,你都不需要这个。 这些文件在具有不同date格式的计算机上或当用户更改操作系统默认值(即使有些美国人比标准MM / DD / YY更喜欢DD / MM / YY)时也会显示不同。

所以正确的解决scheme是datetime而不是string值。 这工作,顺便说一句。 因为win32com里面的COM框架会把Python的datetime对象转换成相应的Exceldate对象,并正确地设置格式。