我有一个由人准备的 xlsm 文件。可以理解的是,某些单元格的格式错误。例如,有些列应该包含整数字符串作为 ID,但某些单元格的格式会错误地设置为日期时间。读取这些单元格时,当 openpyxl 无法将整数解析为日期时间格式时,它会发出警告并将这些单元格标记为错误,例如:
...\lib\site-packages\openpyxl\worksheet_reader.py:223:用户警告:单元格 G14935 被标记为日期,但序列值 1713074675 超出了日期限制。该单元格将被视为错误。 警告(消息)
我在谷歌上搜索了几个小时的解决方案,包括搜索读取单元格时的错误处理方法、设置列或单元格的数据类型(使用pandas读取文件,但我将错误跟踪到openpyxl),但无济于事。我需要的是一种覆盖已保存单元格数据类型的方法,并尝试将其值加载为不同类型。
任何帮助将不胜感激!
注意:通过 pandas 读取文件没有帮助:建议在调用 pd.read_excel 时使用关键字 dtype='string' ,不幸的是,似乎有问题的单元格将首先根据单元格数据类型读取,然后转换为请求的单元格数据类型。
我认为 Openpyxl 没有任何选项可以修复它。
不确定是否还有其他可以尝试的 Pandas。
但是,您应该能够通过更改数字格式来修复使用
Xlwings
的问题。 (请注意,在 Openpyxl 中执行此操作将不起作用)。
import xlwings as xw
xlfile = 'foo.xlsx'
with xw.App(visible=False) as app:
wb = xw.Book(xlfile)
ws = wb.sheets['Sheet1']
### Note you should be able to see the value using the formula field of the cell irrespective of setting the number format.
### But you must change the number format to 'fix' the cell value
print(ws['A1'].formula) # Would print 1713074675
### To fix; Set the number format to General or other appropriate
ws['A1'].number_format = 'General'
print(ws['A1'].value)
wb.save('foo_out.xlsx')