[英]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.