2014-09-24 2 views
6

다음 코드로 datetime을 excel xldate로 변환하는 데 문제가 있습니다. 이것이 올바른 전환 방법입니까?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) 

가 인쇄되어 - 당신이 a[0].value를 사용할 필요가 있도록>

[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

+0

ValueError : 포장을 푸는 데 너무 많은 값이 있습니다. – twfx

+0

질문에 답변을 표시하지 마십시오. 그 동안에 알아 내면 자신의 질문에 대답 할 수 있습니다. – jonrsharpe

답변

17

a[0] 표시되어하는 xlrd.Cell입니다 세포 공동체에 접근하다 네이트. 또한

, 당신은 생산 된 튜플에서 개 이상 값이 있기 때문에 year, month, day, hour, minute에 압축 해제 할 수 없습니다 (어떤 second에 대해이?) 그러나 풀고 튜플을 사용하여 (예를 들어 What does ** (double star) and * (star) do for parameters? 참조) 것을 방지 할 수 있습니다 대신 임시 변수의 : jonrsharpe의 허용 대답 @

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

는 잘 작동합니다. 그러나 이것은 더 깨끗합니다 :

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