Python Openpyxl:';ValueError:最大值为14';使用load_工作簿时

Python Openpyxl:';ValueError:最大值为14';使用load_工作簿时,python,excel,pandas,openpyxl,valueerror,Python,Excel,Pandas,Openpyxl,Valueerror,我试图打开一个excel文件,在该文件中,我需要将数据框插入到某些工作表中,而将其他工作表单独放置。当我在其他excel文件上测试脚本时,它运行良好。当我在我真正需要的手机上使用它时,我会收到一条错误消息 以下是脚本: from openpyxl import load_workbook book = load_workbook(self.directory) Self.directory指的是我的文件位置。正如您在回溯中所看到的,当尝试执行load_工作簿()时,它已经在此行失败,并给出以下

我试图打开一个excel文件,在该文件中,我需要将数据框插入到某些工作表中,而将其他工作表单独放置。当我在其他excel文件上测试脚本时,它运行良好。当我在我真正需要的手机上使用它时,我会收到一条错误消息

以下是脚本:

from openpyxl import load_workbook
book = load_workbook(self.directory)
Self.directory指的是我的文件位置。正如您在回溯中所看到的,当尝试执行load_工作簿()时,它已经在此行失败,并给出以下错误消息:

ValueError:最大值为14

以下是相关的回溯(我留下了以虚拟环境文件夹“virtual”开头的目录位置):

我意识到我使用的EXCEL文件超出了self.max的限制

我自己尝试过筛选openpyxl脚本,但我无法找到self.max所指的内容,或者如何更改Excel文件以便加载工作簿

谁能给我指一下正确的方向吗


提前谢谢

在删除工作表上第15个以上的小“评论框”后,我能够绕过这个错误。

框中评论的数量并不能解决我的问题。我必须删除一些工作表,直到我的工作表总数低于14张,才能打开/阅读文档。

我必须删除工作表中的所有格式


在图书馆工作;全选,“清除直接格式化”

以下是我修复此错误的方法。 我编辑了lib\site packages\openpyxl\descriptors\base.py,并在Max类的第86行后面添加了一条print语句,如下所示:

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个单元格,其中不知何故有font family=34。我在Excel中将字体更改为其他字体,保存了电子表格,然后将其更改回原始字体(Arial)并保存。

所有这些之后,错误消失了。

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

  • 您可以使用xlwings打开它
  • 您可以手动保存到CSV文件并读取

  • 这很有趣。我自己没有任何评论框,但我可能有其他东西与self.max中的评论框集中在一起。我要挖一些。谢谢你的回答!我遇到了一个类似的问题,导致了这个错误:
    'min value is{0}
    用于通过使用openpyxl引擎的
    pd.read\u Excel
    加载Excel文件。我按照你的建议清除了所有的格式,并顺利完成了这项工作!谢谢
    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)