我有一个Excel电子表格,该电子表格的字段包含较小的%f.2值,例如1.2、1.07、2.3等,并且由于某些原因,openpyxl正在将这些单元格读取为1900年日期。我已经看到过很多次出现此问题的时间,但是通常这些用户期望一个日期并且得到一个伪造的日期。我期望一个值,通常x <10.0,我得到大约30-40%的“不良”数据(作为timedate读取),而其他时候则作为数值读取。
我正在使用迭代器,因此我做了一个简单的ws.iter_rows()调用,一次将数据拖到一行。我试图将其“投射”到先前创建的包含数字值的变量,但这并没有多大用处。
有没有人对如何克服这个零星的问题提出建议。如果这是一个已知的错误,是否有任何已知的解决方法?
我发现,如果我将文件存储为csv,然后将其重新打开为csv,然后将其重新存储为xlsx,那么我将得到一个可以正确读取的文件。尽管这有助于调试代码,但我需要一个可以让我的客户使用的解决方案,而不必经历这些麻烦。
我认为,如果该列的格式不正确,则该列将适用于所有元素,因此间歇性地发生这种情况会造成混淆。
import openpyxl
from openpyxl import load_workbook
# Source workbook - wb
wb = load_workbook(filename = r'C:\data\TEST.xlsx' , use_iterators = True)
ws = wb.get_sheet_by_name(name ='QuoteFile ')
for row in ws.iter_rows():
print(row[0].internal_value ,row[3].internal_value ,row[4].internal_value ,row[5].internal_value)
print('Done')
这是我从Excel表中看到的输入
20015 2.13 1.2 08/01/11
20015 5.03 1.2 08/01/11
20015 5.03 1.2 08/01/11
20015 5.51 1.2 08/01/11
20015 8.13 1.2 08/01/11
20015 5.60 1.2 08/01/11
20015 5.03 1.2 08/01/11
20015 1.50 1.2 08/01/11
20015 1.50 1.2 08/01/11
20015 1.50 1.2 08/01/11
20015 1.50 1.2 08/01/11
20015 1.50 1.2 08/01/11
20015 1.50 1.2 08/01/11
这是我的输出,您可以看到前七个行将第二个字段指示为1900年的日期,而第8-13行则将该字段正确显示为数字字段:
20015.0 1900-01-02 03:07:12 1.2 2011-08-01 00:00:00
20015.0 1900-01-05 00:43:12 1.2 2011-08-01 00:00:00
20015.0 1900-01-05 00:43:12 1.2 2011-08-01 00:00:00
20015.0 1900-01-05 12:14:24 1.2 2011-08-01 00:00:00
20015.0 1900-01-08 03:07:12 1.2 2011-08-01 00:00:00
20015.0 1900-01-05 14:24:00 1.2 2011-08-01 00:00:00
20015.0 1900-01-05 00:43:12 1.2 2011-08-01 00:00:00
20015.0 1.5 1.2 2011-08-01 00:00:00
20015.0 1.5 1.2 2011-08-01 00:00:00
20015.0 1.5 1.2 2011-08-01 00:00:00
20015.0 1.5 1.2 2011-08-01 00:00:00
20015.0 1.5 1.2 2011-08-01 00:00:00
20015.0 1.5 1.2 2011-08-01 00:00:00
使用python 3.3和openpyxl 1.6.2
相关分类