如何修复openpyxl中load_workbook抛出的可见性ValueError
报错原因
openpyxl的ChildSheet类对工作表可见性属性做了严格的枚举校验,仅允许veryHidden、visible、hidden三个合法值,你遇到的报错是因为部分Excel文件的工作表可见性属性被设置为了非标准值show,触发了校验失败。
可行修复方案
方案1:临时修改openpyxl校验规则
在调用load_workbook之前,先调整ChildSheet类的合法值范围,代码如下:
from openpyxl.packaging.workbook import ChildSheet # 将'show'加入允许的可见性值列表 ChildSheet._fields['state'].allowed_values.add('show') # 后续正常调用load_workbook即可 new_bk = load_workbook(BytesIO(fname), data_only=True)
如果后续需要标准导出文件,可以在读取完成后,遍历所有工作表,将state为show的统一替换为标准值visible,避免后续导出异常。
方案2:预处理Excel文件
如果不想修改openpyxl的规则,可以先将要读取的Excel文件解压,找到workbook.xml文件,把里面state属性为"show"的节点全部替换为"visible",再重新压缩成Excel文件即可正常读取。
诱因说明
show这个非标准值通常是部分非官方Excel编辑工具或者旧版本Excel生成文件时写入的非标准属性值,不属于官方Excel版本更新导致的问题。
内容的提问来源于stack exchange,提问作者Oneiros
相关产品推荐
相关产品推荐

