2011-06-16 45 views
1

格式化我遇到一些麻煩,這段代碼編寫和使用xlwt

#data_list = some data 
wb = xlwt.Workbook() 
s = wb.add_sheet("Test Sheet") 
for c, data in enumerate(data_list): 
     xf=None 
     if isinstance(data, datetime.time): 
       xf = xlwt.easyxf(num_format_str='HH:MM:SS') #works 
     elif isinstance(data, datetime.date): 
       xf = xlwt.easyxf(num_format_str='MM/DD/YYYY') #doesn't work 
     if xf: 
       sheet.write(r+1,c,data, xf) 
     else: 
       sheet.write(r+1,c,data) 

在輸出datetime.date對象,日期都顯示爲「#####」開始。我可以通過與每列中的單元格交互來正確格式化它們,但這很耗時。我嘗試了一下num_format_str,但是到目前爲止沒有運氣。

+5

您確定這不僅僅是因爲您的Excel中的列太窄嗎?如果該列要縮小以顯示整個日期,則會顯示爲「#######」。 – 2011-06-16 16:51:35

+1

不是您的問題的原因,但:調用xlwt.easyxf通常不便宜。儘可能在進入環路之前進行操作。 – 2011-06-16 21:16:02

+0

感謝這兩個。當然,特里是絕對正確的。而且我發現了在循環內調用easyxf的錯誤:看起來好像沒有檢查xf對象是否在功能上是相同的,所以我在嘗試生成超過一定數量的對象時收到異常。 – mcstrother 2011-06-18 05:13:41

回答

5

考慮到這一點,如果您的問題列太窄,您可以通過在腳本中明確設置列寬來修復它。

for c, data in enumerate(data_list): 
    xf=None 
    sheet.col(c).width = len(str(data))*256 
    if isinstance(data, datetime.time): 

在xlwt寬度以1/256的默認字體的0字符的寬度單位設定。