将xldate转换为python datetime

twf*_*wfx 8 python python-2.7

我有一个问题,使用以下代码将excel xldate转换为python datetime.这是转换的正确方法吗?

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)
Run Code Online (Sandbox Code Playgroud)

a打印 - >

   [xldate:40544.0, number:0.0, number:75.49847785316135, number:75.6401124106301]
Run Code Online (Sandbox Code Playgroud)

显示以下错误

  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'
Run Code Online (Sandbox Code Playgroud)

jon*_*rpe 20

a[0]是一个xlrd.Cell,所以你需要a[0].value用来访问单元格内容.

另外,你无法解压缩,year, month, day, hour, minute因为元组中产生了五个以上的值(怎么样second?)但是,你可以通过使用元组解包来避免这种情况(参见例如**(双星)和*(星))做参数?)而不是临时变量:

py_date = datetime.datetime(*xlrd.xldate_as_tuple(a[0].value,
                                                  book.datemode))
Run Code Online (Sandbox Code Playgroud)


dop*_*tar 15

@ jonrsharpe接受的答案很有效.但这更清洁:

py_date = xlrd.xldate.xldate_as_datetime(a[0].value, book.datemode)
Run Code Online (Sandbox Code Playgroud)