Openpyxl:' ValueError:最大值为14'使用load_workbook时

时间:2018-05-08 15:13:27

标签: python excel pandas openpyxl valueerror

我试图打开一个excel文件,我需要在其中插入数据帧到某些工作表,同时只留下其他工作表。当我在其他excel文件上测试时,脚本工作正常。当我在我真正需要的那个上使用它时,我收到一条错误信息。

这是脚本:

from openpyxl import load_workbook
book = load_workbook(self.directory)

Self.directory指的是我的文件位置。正如您在回溯中看到的那样,在尝试执行load_workbook()时,它在此行已经失败,并提供以下错误消息:

ValueError:最大值为14

以下是相关的追溯(我离开了以虚拟环境文件夹'虚拟'开头的目录位置):

"""
book = load_workbook(self.directory)
virtual\lib\site-packages\openpyxl\reader\excel.py", line 217, in load_workbook
shared_strings = read_string_table(archive.read(strings_path))
virtual\lib\site-packages\openpyxl\reader\strings.py", line 22, in read_string_table
text = Text.from_tree(node).content
virtual\lib\site-packages\openpyxl\descriptors\serialisable.py", line 84, in from_tree
obj = desc.expected_type.from_tree(el)
virtual\lib\site-packages\openpyxl\descriptors\serialisable.py", line 84, in from_tree
obj = desc.expected_type.from_tree(el)
virtual\lib\site-packages\openpyxl\styles\fonts.py", line 110, in from_tree
return super(Font, cls).from_tree(node)
virtual\lib\site-packages\openpyxl\descriptors\serialisable.py", line 100, in from_tree
return cls(**attrib)
virtual\lib\site-packages\openpyxl\cell\text.py", line 114, in __init__
self.family = family
virtual\lib\site-packages\openpyxl\descriptors\nested.py", line 36, in __set__ 6, in __set__
super(Nested, self).__set__(instance, value)
virtual\lib\site-packages\openpyxl\descriptors\base.py", line 110, in __set__ , in __set__ 
super(Min, self).__set__(instance, value)
virtual\lib\site-packages\openpyxl\descriptors\base.py", line 89, in __set__ in __set__
raise ValueError('Max value is {0}'.format(self.max))
ValueError: Max value is 14
"""

我意识到我使用的超级自我超过了self.max。

我自己尝试过筛选openpyxl脚本,但我无法弄清楚self.max指的是什么,或者我如何更改我的Excel文件以便我可以加载工作簿。

有人能指出我正确的方向吗?

提前致谢!

5 个答案:

答案 0 :(得分:1)

我必须删除正在处理的工作表中的所有格式。

在Libreoffice中;选择所有“清除直接格式”

答案 1 :(得分:1)

这是为我修复此错误的原因。 我编辑了 lib \ site-packages \ openpyxl \ descriptors \ base.py ,并在类Max的第86行之后添加了一条打印语句,如下所示:

def __set__(self, instance, value):
    if ((self.allow_none and value is not None)
        or not self.allow_none):
        value = _convert(self.expected_type, value)
        if value > self.max:
            print(f"value is {value}")
            raise ValueError('Max value is {0}'.format(self.max))
    super(Max, self).__set__(instance, value)

这将打印出34的值,该值明显高于最大值14(这是字体系列值)。

然后,我保存了扩展名为.zip的Excel电子表格的副本,提取了所有XML文件,然后使用grep搜索val =“ 34”。这导致我进入3个单元,它们中的字体家族= 34。我在Excel中将字体更改为其他字体,保存了电子表格,然后将其更改回原始字体(Arial)并保存。
完成所有这些操作后,错误消失了。

答案 2 :(得分:0)

在删除工作表上的第15个+“评论框”后,我能够解决错误。

答案 3 :(得分:0)

带框的评论数量没有解决我的问题。为了能够打开/阅读文档,我不得不删除一些工作表,直到总共不到14个工作表为止。

答案 4 :(得分:0)

是WPS生成的excel文件,不是MS office生成的。

  1. 您可以使用 xlwings 打开它。
  2. 您可以手动保存到 CSV 文件并阅读。