为了账号安全,请及时绑定邮箱和手机立即绑定

使用openpyxl将浮动数值读取为timedate

使用openpyxl将浮动数值读取为timedate

猛跑小猪 2021-03-18 06:05:17
我有一个Excel电子表格,该电子表格的字段包含较小的%f.2值,例如1.2、1.07、2.3等,并且由于某些原因,openpyxl正在将这些单元格读取为1900年日期。我已经看到过很多次出现此问题的时间,但是通常这些用户期望一个日期并且得到一个伪造的日期。我期望一个值,通常x <10.0,我得到大约30-40%的“不良”数据(作为timedate读取),而其他时候则作为数值读取。我正在使用迭代器,因此我做了一个简单的ws.iter_rows()调用,一次将数据拖到一行。我试图将其“投射”到先前创建的包含数字值的变量,但这并没有多大用处。有没有人对如何克服这个零星的问题提出建议。如果这是一个已知的错误,是否有任何已知的解决方法?我发现,如果我将文件存储为csv,然后将其重新打开为csv,然后将其重新存储为xlsx,那么我将得到一个可以正确读取的文件。尽管这有助于调试代码,但我需要一个可以让我的客户使用的解决方案,而不必经历这些麻烦。我认为,如果该列的格式不正确,则该列将适用于所有元素,因此间歇性地发生这种情况会造成混淆。import openpyxlfrom openpyxl import load_workbook# Source workbook - wbwb = 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/1120015   5.03    1.2 08/01/1120015   5.03    1.2 08/01/1120015   5.51    1.2 08/01/1120015   8.13    1.2 08/01/1120015   5.60    1.2 08/01/1120015   5.03    1.2 08/01/1120015   1.50    1.2 08/01/1120015   1.50    1.2 08/01/1120015   1.50    1.2 08/01/1120015   1.50    1.2 08/01/1120015   1.50    1.2 08/01/1120015   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:0020015.0 1900-01-05 00:43:12 1.2 2011-08-01 00:00:0020015.0 1900-01-05 00:43:12 1.2 2011-08-01 00:00:0020015.0 1900-01-05 12:14:24 1.2 2011-08-01 00:00:0020015.0 1900-01-08 03:07:12 1.2 2011-08-01 00:00:0020015.0 1900-01-05 14:24:00 1.2 2011-08-01 00:00:0020015.0 1900-01-05 00:43:12 1.2 2011-08-01 00:00:0020015.0 1.5 1.2 2011-08-01 00:00:0020015.0 1.5 1.2 2011-08-01 00:00:0020015.0 1.5 1.2 2011-08-01 00:00:0020015.0 1.5 1.2 2011-08-01 00:00:0020015.0 1.5 1.2 2011-08-01 00:00:0020015.0 1.5 1.2 2011-08-01 00:00:00使用python 3.3和openpyxl 1.6.2
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 198 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信