【问题标题】:Filling an excel file with python is messing up my dates用 python 填充一个 excel 文件弄乱了我的日期
【发布时间】:2013-03-06 18:39:28
【问题描述】:

这里是过程, 我有一个名为模板的 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

【问题讨论】:

  • 如果你能记下你使用什么库来处理 excel,它会更有用。

标签: python excel python-2.7


【解决方案1】:

除非您告诉 Excel,否则它会尝试“智能”处理日期,这意味着它会猜测格式是什么以及如何显示转换后的日期。

几乎在所有情况下,您都不希望这样。此类文件在具有不同日期格式的计算机上或当用户更改了操作系统默认值时(甚至一些美国人更喜欢 DD/MM/YY 而不是标准的 MM/DD/YY),会以不同的方式显示。

所以正确的解决方案是datetime,而不是字符串值。这行得通,顺便说一句。因为win32com 内部的COM 框架会将Python datetime 对象转换为相应的Excel 日期对象并正确设置格式。

【讨论】:

  • 所以解决方法就是解决方案,谢谢您的解释:D
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-10-10
  • 1970-01-01
  • 2014-07-20
  • 2014-12-21
  • 2011-08-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多