Python xlrd 单元格的原始值

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/16229610/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-18 22:04:04  来源:igfitidea点击:

xlrd original value of the cell

pythonexcelxlsxlrd

提问by artyomboyko

I'm reading xls file using xlrd. The problem is, when xlrd reading value like this "12/09/2012", i get result like this "xldate:41252.0". When I use xlrd.xldate_as_tuple, i get this result:

我正在使用 xlrd 读取 xls 文件。问题是,当 xlrd 读取这样的值"12/09/2012" 时,我得到这样的结果"xldate:41252.0"。当我使用xlrd.xldate_as_tuple 时,我得到了这个结果:

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

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

My code:

我的代码:

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)

Result:

结果:

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

Both results are wrong for me. How can i get original cell value "12/09/2012" using xlrd ?

这两个结果对我来说都是错误的。如何使用 xlrd 获取原始单元格值“12/09/2012”?

采纳答案by alecxe

According to the docstring, you should pass your workbook's datemode to xldate_as_tupleas a second parameter:

根据docstring,您应该将工作簿的 datemodexldate_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