2015-05-11 34 views
0

我想用dd-mm-yyyy的標準格式替換特定格式中的日期。第10列中的實際日期將類似於6.2017,7.2017,其中7是該月並且2017是該年。我只需要在所有值之前添加1-,然後我想用-(連字符)替換日期值中存在的點。所以輸出看起來像1-6-2017,1-7-2017。請注意,該列可能包含none值。在那種情況下,我想跳過那些沒有值。如何用openpyxl替換特定列中的值?

這是我試過,

from openpyxl import load_workbook 
wb = load_workbook(r'E:\foo\Python\stocktable.xlsx') 
ws = wb.get_active_sheet() 
for rownum in range(2, ws.get_highest_row()): 
    print(str(ws.cell(row=rownum, column=10).value)) 

輸出:

6.2017 
7.2016 
7.2017 
6.2017 
7.2017 
7.2017 
2.2016 
7.2017 
8.2016 
None 

所以我添加了一個痘痘位調整到上面的代碼,以我的情況工作。但它失敗了。

from openpyxl import load_workbook 
wb = load_workbook(r'E:\foo\Python\stocktable.xlsx') 
ws = wb.get_active_sheet() 
for rownum in range(2, ws.get_highest_row()): 
    ws.cell(row=rownum, column=10).value = '1-' + str(ws.cell(row=rownum, column=10).value.replace('.', '-') 

wb.save(r'E:\foo\Python\stocktable.xlsx') 

也就是說,它顯示了一個錯誤symtax​​一樣,

File "E:\foo\Python\python-excel.py", line 7 
    wb.save() 
    ^
SyntaxError: invalid syntax 
+0

你是什麼意思的「它失敗」?什麼是錯誤?如何把'month,year = ws.cell(row = rownum,column = 10).value.split(「。」)'後面跟ws.cell(row = rownum,column = 10).value = year + 「 - 」+月+「 - 」+「01」'? – shahkalpesh

+0

@shahkalpesh added .... – user197324

+0

爲什麼在保存時需要重新輸入文件名?嘗試使用'wb.save()'代替。 – shahkalpesh

回答

-1

好吧,我想通了這個問題,下面的代碼爲我工作。

from openpyxl import load_workbook 
wb = load_workbook(r'E:\foo\Python\stocktable.xlsx') 
ws = wb.get_active_sheet() 
for rownum in range(2, ws.get_highest_row()): 
    try: 
     month, year = str(ws.cell(row=rownum, column=10).value).split(".") 
     ws.cell(row=rownum, column=10).value = '1-' + str(month) + '-' + str(year) 
    except ValueError: 
     pass  

wb.save(r'E:\foo\Python\stocktable.xlsx') 

就像@shahkalpesh說,在他的評論,我只是分割字符串(起初是爲浮點格式,所以我將其轉換爲字符串,然後以此爲基礎點分裂)根據點並保存值爲monthyear變量。

然後我把代碼放在tryexcept塊內,因爲這個列包含none的值。

+0

我可以知道downvote的原因嗎?我認爲這對未來的讀者會有所幫助。 – user197324

+0

您的代碼顯示完全缺乏對數據格式的理解。通過字符串轉換數字和日期之間的轉換肯定是錯誤的事情。 –

+0

@CharlieClark由於輸入是十進制格式,我想將它轉換爲上面的字符串。稍後,navicat軟件會自動將該字符串格式轉換爲日期。 – user197324

0

如果您只是想更改日期或時間的格式,則只需更改單元格的number_format即可。

for row in range(2, ws.max_row): 
    cell = ws.cell(row=row, column=10) 
    cell.number_format = "dd-mm-yyyy" 
+0

@Chalie默認情況下是浮動格式。 – user197324

+0

Excel將日期視爲浮動,僅使用格式來區分它們。 –

相關問題