You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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,可以更换兼容性更强的读取引擎绕过格式校验:

  1. 先安装calamine引擎依赖:
pip install python-calamine
  1. 修改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文件,就可以正常读取:

  1. 先安装依赖:
pip install xlwings
  1. 替换读取逻辑:
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 04:54:03