python - 用 python 填充 excel 文件搞乱了我的日期

标签 python excel python-2.7

流程如下 我在名为数据的工作表中有一个名为模板的 xlsm 文件。 然后我有 5 个 Csv 文件,我必须将所有 csv 文件的内容放在数据工作表中。

这样做没有问题,除非日期是“2012 年 7 月 9 日”,在 Excel 中它将变成“12 年 7 月 9 日”。

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

['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,否则它会尝试“智能”处理日期,这意味着它会猜测格式是什么以及如何显示转换后的日期。

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

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

关于python - 用 python 填充 excel 文件搞乱了我的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15225378/

相关文章:

python - 在 .py 文件之间定义全局变量的正确方法是什么

python - IMDbPY get_top250_movies() 返回空列表

python - requests 模块获取的内容与页面上的内容不同

Python:模拟在 celery 任务中不起作用

python - 在 Matplotlib 中使用子图时如何控制颜色条位置

string - 将包含天、小时和分钟的字符串转换为 hh :mm:ss

java - 使用 Apache poi 始终在 excel 单元格中显示两位小数

excel - 在Excel中将12小时时间转换为24小时时间

python-2.7 - 在编辑器中设置 Google App Engine

python - 看似简单的递归函数以无限循环结束