这是过程,我有一个名为模板的 xlsm 文件,位于名为 data 的工作表中。然后我有 5 个 csv 文件,我必须将所有 csv 文件的内容放在数据工作表中。
这样做没有问题,除非日期是“07/09/12”,否则它将在 Excel 中变为“09/07/12”。
所以我有一个名为 data 的列表,这是其中一行的打印
['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()
除了日期和月份在 excel 中倒置外,其他一切都很好(它不显示美国格式,而是显示月份和日期倒置的欧元格式(10 月 3 日变为 3 月 9 日,使用“长日期”格式进行测试)
奇怪的事情:包含日期的 excel 单元格设置为“标准”,但是一旦它被我的 python 脚本归档,它就会设置为“日期”
解决方法 在填写表格时我截取每个日期并将它们转换为日期时间,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