web-dev-qa-db-ja.com

セルのxlrd元の値

Xlrdを使用してxlsファイルを読み取っています。問題は、このようなxlrd読み取り値の場合"12/09/2012"、このような結果が得られることです"xldate:41252.0"xlrd.xldate_as_Tupleを使用すると、次の結果が得られます。

(2016、12、10、0、0、0)

私のコード:

curr_row = -1
while curr_row < num_rows:
    curr_row += 1
    row = worksheet.row(curr_row)     
        for x in xrange(num_cols):
            field_type = worksheet.cell_type(curr_row, x)
            if field_type == 3: # this is date
                field_value = worksheet.cell_value(curr_row, x)
                print worksheet.cell(curr_row, x).value
                print xlrd.xldate_as_Tuple(field_value, 1)

結果:

41252.0
(2016, 12, 10, 0, 0, 0)

どちらの結果も私には間違っています。 xlrdを使用して元のセル値「12/09/2012」を取得するにはどうすればよいですか?

9
twoface88

docstring によると、ワークブックの日付モードを2番目のパラメーターとしてxldate_as_Tupleに渡す必要があります。

from datetime import datetime
import xlrd


book = xlrd.open_workbook("test.xls")
sheet = book.sheet_by_index(0)
a1 = sheet.cell_value(rowx=0, colx=0)

print a1  # prints 41252.0
print xlrd.xldate_as_Tuple(a1, 1)  # prints (2016, 12, 10, 0, 0, 0)

a1_Tuple = xlrd.xldate_as_Tuple(a1, book.datemode)  
print a1_Tuple  # prints (2012, 12, 9, 0, 0, 0)

a1_datetime = datetime(*a1_Tuple)
print a1_datetime.strftime("%m/%d/%Y")  # prints 12/09/2012
15
alecxe