two*_*e88 9 python excel xls 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)
Run Code Online (Sandbox Code Playgroud)
结果:
41252.0
(2016, 12, 10, 0, 0, 0)
Run Code Online (Sandbox Code Playgroud)
这两个结果对我来说都是错的.如何使用xlrd获取原始单元格值"12/09/2012"?
ale*_*cxe 15
根据docstring,您应该将工作簿的datemode 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
Run Code Online (Sandbox Code Playgroud)