Python读取Excel报ValueError: Max value is 14,有什么可行解决方案?
报错原因
这个错误是旧版本openpyxl(3.0.7及更早版本)的兼容bug:目标Excel文件由第三方导出工具、低版本Office/WPS生成时,写入了不符合Open XML规范的自定义数字格式索引,超出了openpyxl预设的最大索引阈值14,触发抛出异常。
可行解决方案
方案1:升级openpyxl(优先尝试)
这是官方修复后的最优解,直接升级openpyxl到最新稳定版即可兼容这类非标准格式文件:
执行安装命令:
pip install --upgrade openpyxl
升级完成后无需修改原有代码,直接运行即可正常读取。
方案2:更换pandas读取引擎
如果环境限制无法升级openpyxl,可以更换兼容性更强的读取引擎绕过格式校验:
- 先安装calamine引擎依赖:
pip install python-calamine
- 修改
pandas.read_excel的engine参数即可:
# 替换原有读取逻辑即可 xls = pd.read_excel( download_folder+excel, sheet_name='Sheet1', header=1, skiprows=list(range(5)), engine="calamine" )
方案3:调用本地Office程序读取(兼容性最高)
如果上述方案都失效,可以用xlwings调用本地安装的Excel/WPS程序读取文件,只要你本地能正常打开这个Excel文件,就可以正常读取:
- 先安装依赖:
pip install xlwings
- 替换读取逻辑:
import xlwings as xw with xw.App(visible=False, add_book=False) as app: wb = app.books.open(download_folder+excel) sht = wb.sheets['Sheet1'] # 直接读取已使用区域转DataFrame,根据需求调整行列筛选逻辑 xls = sht.used_range.options(pd.DataFrame, header=1, index=False).value # 对应原来的skiprows逻辑可以在读出DataFrame后再切片:xls = xls.iloc[5:].reset_index(drop=True) wb.close()
方案4:旧版openpyxl绕过样式校验
如果必须使用旧版本openpyxl,可以在读文件时开启只读模式、忽略样式校验,自行读取内容转DataFrame:
from openpyxl import load_workbook import pandas as pd wb = load_workbook( filename = download_folder+excel, read_only=True, # 开启只读模式跳过部分格式校验 data_only=True # 只读取单元格值,忽略样式、公式 ) sht = wb['Sheet1'] # 遍历行读取内容 data = [] for row in sht.iter_rows(values_only=True): data.append(row) # 自行处理表头、跳过行逻辑 xls = pd.DataFrame(data[6:], columns=data[1]) # 对应原来的header=1,skiprows=5的逻辑 wb.close()
内容的提问来源于stack exchange,提问作者Dametime
相关产品推荐
相关产品推荐

