将xldate转换为python日期时间

问题描述:

我有一个问题,使用下面的代码将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

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)) 

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

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