2013-06-12 41 views
9

我使用xlwt創建了一個.xls電子表格,並且我需要創建日期單元格。用Excel「日期」格式書寫xlwt日期

我已經寫出數字,並設置數字格式字符串,使它們看起來像日期,但批判地說,他們實際上並沒有寫入日期 - 如果你在Excel中格式化單元格,它是一個「自定義」類別而不是「日期」一個,這很重要。

我可以讓xlwt實際寫出「日期」單元嗎?

回答

17

將在Excel的「日期」類別顯示,如果你使用對應於Excel的一個格式字符串的數字內置格式字符串,如dd/mm/yyy。例如:

import xlwt 
import datetime 

workbook = xlwt.Workbook() 
worksheet = workbook.add_sheet('Sheet1') 

date_format = xlwt.XFStyle() 
date_format.num_format_str = 'dd/mm/yyyy' 

worksheet.write(0, 0, datetime.datetime.now(), date_format) 

workbook.save('date_format.xls') 

如果你修改這個例子中使用的d/mm/yyy格式字符串,則數量將在「自定義」類別中。

注意:上述代碼適用於我試過的Excel版本,但有可能這是受區域變化的影響。最好的辦法是在Excel中用你想要的「Date」格式格式化一個數字,然後在同一個對話框中點擊「Custom」來查看與「Date」格式相關的格式字符串。然後在你的程序中使用它。

另外:Excel XLS格式中沒有任何本機日期類型。所有日期都以數字和格式存儲。除了格式字符串之外,沒有什麼區別它們與格式的任何其他數字。由於必須應用啓發式方法來確定單元格是否包含日期,因此這是解析Excel文件時很痛苦的一件事情。

+0

謝謝,就是這樣。 – xorsyst

+1

+1,但應該補充的是,僅僅使用諸如'2014-01-23'之類的ISO格式字符串將不會按預期進行轉換(格式將爲日期,但內容將是無用的文本字符串) ;使用實際的datetime()對象可以避免這個問題。 我沒有使用全面的ISO字符串(如'2014-01-23T12:34:56')進行測試,該字符串可能仍然有效 - 如果他們知道這個字符,其他人應該在這裏放一張便條。 – Ryder

+0

@RyderDain該問題的標題是誤導性的,可能應該進行編輯。這個問題,答案和例子是關於如何使用'xlwt'生成內置日期格式與自定義格式。不討論生成實際日期。 – jmcnamara

3

http://www.youlikeprogramming.com/2011/04/examples-generating-excel-documents-using-pythons-xlwt/

輸入日期成小區

 

import xlwt 
import datetime 
workbook = xlwt.Workbook() 
worksheet = workbook.add_sheet('My Sheet') 
style = xlwt.XFStyle() 
style.num_format_str = 'D-MMM-YY' # Other options: D-MMM-YY, D-MMM, MMM-YY, h:mm, h:mm:ss, h:mm, h:mm:ss, M/D/YY h:mm, mm:ss, [h]:mm:ss, mm:ss.0 
worksheet.write(0, 0, datetime.datetime.now(), style) 
workbook.save('Excel_Workbook.xls') 
 
+0

謝謝,但這就是我已經在做的事情,並且根據我的問題它不能正常工作。 – xorsyst

+0

嘗試將單元格格式更改爲「常規」。獲取預期的浮點數。更改爲「日期」格式,並顯示正確的日期。有什麼特別的原因爲什麼很重要? – shantanoo

+0

是的,它的工作原理,但恐怕它的確很重要,因爲它是Date在第一位。我只能在這裏模糊,說「要求」。 – xorsyst