openpyxl 3.1.2读取带筛选Excel报错,求无需取消筛选的解决方案
解决openpyxl读取带筛选Excel时的ValueError问题
当使用openpyxl 3.1.2执行wb = openpyxl.load_workbook(file)读取带筛选的Excel文件时,出现的ValueError: Value must be either numerical or a string containing a wildcard错误,是因为openpyxl对某些复杂筛选规则(如日期筛选、不含通配符的自定义文本筛选)的解析逻辑存在限制。以下是几种无需取消筛选即可加载文件的解决方案:
方法1:采用只读模式加载
只读模式下,openpyxl会跳过筛选规则的解析,仅读取单元格数据,直接绕过错误。代码示例:
import openpyxl wb = openpyxl.load_workbook(file, read_only=True)
注意:只读模式仅支持读取操作,无法对文件进行编辑修改。
方法2:修改openpyxl源码修复筛选判断逻辑
若需要以读写模式加载文件,可手动修改openpyxl的filters.py文件(路径通常为Python安装目录下的site-packages/openpyxl/worksheet/filters.py):
找到处理筛选条件的_deserialize方法中抛出错误的代码段,将原有的数值验证逻辑:
if not (isinstance(v, (int, float)) or (isinstance(v, str) and "*" in v)): raise ValueError("Value must be either numerical or a string containing a wildcard")
修改为允许所有合法字符串类型的筛选条件:
if not isinstance(v, (int, float, str)): raise ValueError("Value must be either numerical or a string containing a wildcard")
修改后保存文件,即可用常规方式加载带筛选的Excel文件。
方法3:升级openpyxl到最新稳定版
该问题在openpyxl的后续版本中已被修复,通过升级版本可直接解决:
pip install --upgrade openpyxl
升级完成后,使用原代码wb = openpyxl.load_workbook(file)即可正常加载带筛选的文件。
内容的提问来源于stack exchange,提问作者hbszjjw
相关产品推荐
相关产品推荐

