xlrd单元格的原始值

10
我正在使用 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"?

1个回答

20
根据文档字符串,应将工作簿的日期模式作为第二个参数传递给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

3
可以!您可以使用日期格式化功能将日期对象转换回原始字符串。在JavaScript中,您可以使用以下代码:const date = new Date('12/09/2012'); const originalString = date.toLocaleDateString(); console.log(originalString); // 输出 "12/9/2012" 或其他本地化的日期格式这将把日期对象转换回其原始字符串表示形式。 - artyomboyko

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接