konversi xldate ke python datetime

Saya memiliki masalah saat mengonversi excel xldate ke python datetime dengan kode berikut. Apakah ini cara yang tepat untuk berkonversi?

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

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

Kesalahan di bawah ini ditampilkan

  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'

person twfx    schedule 24.09.2014    source sumber
comment
Bukankah seharusnya itu a[0].value?   -  person jonrsharpe    schedule 24.09.2014
comment
ValueError: terlalu banyak nilai untuk dibongkar   -  person twfx    schedule 24.09.2014
comment
Jangan keluarkan jawaban dalam pertanyaan; Anda dapat menjawab pertanyaan Anda sendiri jika Anda mengetahuinya sementara itu.   -  person jonrsharpe    schedule 24.09.2014


Jawaban (2)


a[0] adalah xlrd.Cell, jadi Anda perlu menggunakan a[0].value untuk mengakses isi sel.

Selain itu, Anda tidak dapat membongkar ke year, month, day, hour, minute karena ada lebih dari lima nilai dalam tupel yang dihasilkan (bagaimana dengan second?) Namun, Anda dapat menghindarinya dengan menggunakan pembongkaran tupel (lihat misalnya Apa yang dilakukan ** (bintang ganda) dan * (bintang) untuk parameter?) alih-alih variabel sementara:

py_date = datetime.datetime(*xlrd.xldate_as_tuple(a[0].value,
                                                  book.datemode))
person jonrsharpe    schedule 24.09.2014

Jawaban yang diterima @jonrsharpe berfungsi dengan baik. Tapi ini lebih bersih:

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