【问题标题】:xlrd original value of the cellxlrd 单元格的原始值
【发布时间】:2013-04-26 05:53:26
【问题描述】:

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

【问题讨论】:

    标签: python excel xls xlrd


    【解决方案1】:

    根据docstring,您应该将工作簿的日期模式作为第二个参数传递给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
    

    【讨论】:

    • 它有帮助!但有什么办法可以得到原始字符串“12/09/2012”?
    猜你喜欢
    • 1970-01-01
    • 2017-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-08
    • 1970-01-01
    • 2016-11-27
    • 1970-01-01
    相关资源
    最近更新 更多