Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用python填充excel文件会弄乱我的日期_Python_Excel_Python 2.7 - Fatal编程技术网

用python填充excel文件会弄乱我的日期

用python填充excel文件会弄乱我的日期,python,excel,python-2.7,Python,Excel,Python 2.7,这就是过程, 我有一个名为template的xlsm文件,在一个名为data的工作表中。 然后我有5个Csv文件,我必须把所有Csv文件的内容放在数据工作表中 这样做没有问题,除非日期是“07/09/12”,它将在excel中变为“09/07/12” 我有一个叫做数据的列表,这是它的一行的打印 ['07/09/12', 'LARO', 'MEDITERRAN', '245', 'UZES', '11', '0', '0', '0', '0', '11', '0'] 我用以下代码将文件放入exc

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

这样做没有问题,除非日期是“07/09/12”,它将在excel中变为“09/07/12”

我有一个叫做数据的列表,这是它的一行的打印

['07/09/12', 'LARO', 'MEDITERRAN', '245', 'UZES', '11', '0', '0', '0', '0', '11', '0']
我用以下代码将文件放入excel文件:

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

然后我删除数据工作表

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中倒转外,一切都很好(它不显示US格式,而是显示EUR格式,月份和日期倒转(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日期对象,并正确设置格式。

如果您注意到您使用的是什么库,它会更有用或者使用excel。所以解决方法就是解决方案,谢谢您的解释:D
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