簡體   English   中英

使用python填充excel文件會弄亂我的日期

[英]Filling an excel file with python is messing up my dates

這是一個過程,我在一個名為data的工作表中有一個名為template的xlsm文件。 然后我有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日變為9月3日,使用“長日期”格式測試)

奇怪的是:包含日期的excel單元格被設置為“標准”但是一旦它被我的python腳本提交,它就被設置為“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,否則它會嘗試使用日期“智能”,這意味着它會猜測格式是什么以及如何顯示轉換日期。

在幾乎所有情況下,你都不希望如此。 這些文件在具有不同日期格式的計算機上或用戶更改操作系統默認值時會以不同方式顯示(甚至一些美國人更喜歡DD / MM / YY而不是標准MM / DD / YY)。

所以正確的解決方案是使用datetime而不是字符串值。 這很有效,順便說一下。 因為win32com的COM框架會將Python datetime對象轉換為相應的Excel日期對象,並正確設置格式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM