【问题标题】:Openpyxl fails to read row when reference attribute is missing缺少引用属性时,Openpyxl 无法读取行
【发布时间】:2019-06-21 15:29:46
【问题描述】:

我正在使用 openpyxl 读取 Excel 工作表。它在迭代和解析行时抛出 KeyError,因为 openxml 行元素没有引用属性 ('r')。它只有一个样式索引('s')和'customFormat'。

Openxml spreadsheet attributes

如何读取此文件中的单元格?

无论工作簿是否以只读方式打开,以及引用单元格的方式不同,都会发生错误,因为它们都调用openpyxl.worksheet._reader.parse_row()

不能分享excel工作簿,但是python代码很简单。

wb = load_workbook(filename)
ws = wb['Sheet1']
print(ws['A1'])

错误:

  File "openpyxl\worksheet\_reader.py", line 150, in parse
    row = self.parse_row(element)
  File "openpyxl\worksheet\_reader.py", line 272, in parse_row
    self.row_dimensions[attrs['r']] = attrs
KeyError: 'r'

从调试器:

row = {Element} <Element '{http://schemas.openxmlformats.org/spreadsheetml/2006/main}row' at 0x000002713782E9F8>
    attrib = {dict} <class 'dict'>: {'s': '148', 'customFormat': '1'}
    tag = {str} '{http://schemas.openxmlformats.org/spreadsheetml/2006/main}row'
    tail = {NoneType} None
    text = {NoneType} None

【问题讨论】:

  • 我认为您必须为此修补源代码。

标签: python excel openpyxl


【解决方案1】:

您必须降级到 openpyxl 版本 2.5.14。

一位开发人员说(在 openpyxl 的 2.6.x 版本中)'r' 属性是必需的,即使 OOXML 规范说它是可选的。请参阅this issue opened on BitBucket 了解更多信息。

【讨论】:

    猜你喜欢
    • 2019-07-05
    • 1970-01-01
    • 1970-01-01
    • 2020-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-23
    • 2018-11-27
    相关资源
    最近更新 更多