openpyxl:ValueError:值必须是{'选择','数据','字段'}之一

use*_*795 1 python excel vba python-3.x openpyxl

有一个 xlsm 文件,我需要根据工作表中启用的宏打开、编辑和提取数据。

但我无法打开文件本身。我试过:

wb = openpyxl.load_workbook("workbook.xlsm",read_only=False,keep_vba=True)
Run Code Online (Sandbox Code Playgroud)

发生错误:

Traceback (most recent call last):
  File "C:/Users/Downloads/Projects/Project1/Trial4.py", line 7, in <module>
    wb = openpyxl.load_workbook("workbook.xlsm",read_only=False,keep_vba=True)
  File "C:\Users\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\openpyxl\reader\excel.py", line 317, in load_workbook
    reader.read()
  File "C:\Users\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\openpyxl\reader\excel.py", line 282, in read
    self.read_worksheets()
  File "C:\Users\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\openpyxl\reader\excel.py", line 268, in read_worksheets
    pivot = TableDefinition.from_tree(tree)
  File "C:\Users\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\openpyxl\descriptors\serialisable.py", line 83, in from_tree
    obj = desc.from_tree(el)
  File "C:\Users\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\openpyxl\descriptors\sequence.py", line 85, in from_tree
    return [self.expected_type.from_tree(el) for el in node]
  File "C:\Users\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\openpyxl\descriptors\sequence.py", line 85, in <listcomp>
    return [self.expected_type.from_tree(el) for el in node]
  File "C:\Users\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\openpyxl\descriptors\serialisable.py", line 103, in from_tree
    return cls(**attrib)
  File "C:\Users\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\openpyxl\pivot\table.py", line 481, in __init__
    self.scope = scope
  File "C:\Users\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\openpyxl\descriptors\base.py", line 128, in __set__
    raise ValueError(self.__doc__)
ValueError: Value must be one of {'selection', 'data', 'field'}
Run Code Online (Sandbox Code Playgroud)

有人可以提供解决这个问题的方法吗?TIA

小智 5

我遇到了同样的问题,在互联网上找不到解决方案,所以我解构了 openpyxl,终于找到了。

看起来缺少一段代码来管理“ConditionalFormat”,所以我从源 Excel 中将其全部删除。

这似乎已经解决了问题。