2014-09-24 16 views
6

Ich habe ein Problem beim Konvertieren von Excel xldate zu Python datetime mit dem folgenden Code. Ist das der richtige Weg um zu konvertieren?konvertieren xldate zu 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 gedruckt wird ->

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

Die unten Fehler angezeigt

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

Sollte das nicht "ein [0] .Wert" sein? – jonrsharpe

+0

ValueError: zu viele Werte zum Entpacken – twfx

+0

Antworten Sie nicht in der Frage aus; Sie können Ihre eigene Frage beantworten, wenn Sie es in der Zwischenzeit herausfinden. – jonrsharpe

Antwort

17

a[0] ist ein xlrd.Cell, so dass Sie a[0].value verwenden müssen Greife auf die Zelle zu Intent.

Sie können aber auch nicht zu year, month, day, hour, minute auspacken, weil es mehr als fünf Werte in dem Tupel erzeugt (was second?) Sie können jedoch verhindern, dass Auspacken unter Verwendung Tupel (siehe zB What does ** (double star) and * (star) do for parameters?) anstelle der temporären Variablen :

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

@ jonrsharpers akzeptierte Antwort funktioniert gut. Aber das ist sauberer:

Verwandte Themen