2014-09-24 177 views
6

我有一個問題,使用下面的代碼將excel xldate轉換爲python datetime。這是轉換的正確方法嗎?將xldate轉換爲python日期時間

import xlrd 
from datetime import datetime 

book = xlrd.open_workbook("a.xls") 
sh = book.sheet_by_index(0) 
for rx in range(1,sh.nrows): 
    a = sh.row(rx) 
    print a 
    year, month, day, hour, minute = xlrd.xldate_as_tuple(a[0], book.datemode) 
    py_date = datetime.datetime(year, month, day, hour, minute) 

一個印 - >

[xldate:40544.0, number:0.0, number:75.49847785316135, number:75.6401124106301] 

year, month, day, hour, minute = xlrd.xldate_as_tuple(a[0], book.datemode) 

    File "C:\Anaconda\Lib\site-packages\xlrd\xldate.py", line 67, in xldate_as_tuple 
    xldays = int(xldate) 
    TypeError: int() argument must be a string or a number, not 'Cell' 
+0

不應該是'a [0] .value'嗎? – jonrsharpe 2014-09-24 07:05:01

+0

ValueError:解包的值太多 – twfx 2014-09-24 07:08:06

+0

不要在問題中輸出答案;如果你在此期間弄明白的話,你可以回答你自己的問題。 – jonrsharpe 2014-09-24 07:18:40

回答

17

a[0]下面的錯誤是xlrd.Cell,所以需要使用a[0].value到訪問cell co ntent。

而且,你不能解壓縮到year, month, day, hour, minute因爲在生產的元組五個以上的值(怎麼樣second?)但是,你能避免通過使用元組拆包(見例如What does ** (double star) and * (star) do for parameters?),而不是臨時變量:

py_date = datetime.datetime(*xlrd.xldate_as_tuple(a[0].value, 
                book.datemode)) 
8

@ jonrsharpe接受的答案效果很好。但這是更清潔的:

py_date = xlrd.xldate.xldate_as_datetime(a[0].value, book.datemode) 
相關問題