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

使用openpyxl调用load_workbook时触发ValueError: Max value is 14

搞定Openpyxl加载Excel时的ValueError: Max value is 14报错

问题还原

你说用openpyxl加载某个目标Excel文件时,刚执行load_workbook(self.directory)就炸了,抛出ValueError: Max value is 14,但其他文件测试都正常——你的需求是把DataFrame插入指定工作表,同时保留其他工作表不变对吧?

为啥会出这问题?

这个报错大概率和目标Excel里的单元格格式/样式有关:

  • 旧版的openpyxl对Excel的数字格式ID(numFmtId)有严格限制,超过14的自定义格式它就认不出来了;
  • 要么就是文件里有损坏的样式定义,或者用了openpyxl不兼容的特殊格式(比如某些第三方插件生成的奇怪格式)。

给你几个解决思路,按顺序试就行:

1. 先把openpyxl更到最新版

旧版本的格式兼容性拉胯,升级之后很多这类问题直接就没了,执行这个命令就行:

pip install --upgrade openpyxl

2. 加载时跳过样式解析

如果升级后还是不行,那就在加载文件的时候告诉openpyxl别管样式,只加载单元格的值:

from openpyxl import load_workbook
# data_only=True会加载计算后的值,不加载公式和样式;如果需要保留公式,只去掉data_only参数即可
book = load_workbook(self.directory, data_only=True)

要是文件特别大,也可以试试只读模式,但只读模式没法修改保存,适合只读取数据的场景:

book = load_workbook(self.directory, read_only=True)

3. 手动修复Excel文件本身

打开那个出问题的Excel,做这几件事:

  • 检查所有单元格的自定义格式,删掉那些看起来异常的格式;
  • 另存为一个新的.xlsx文件(别直接覆盖原文件,留个备份),然后用脚本加载新文件试试;
  • 如果文件带宏,记得另存为.xlsm格式,加载的时候加上keep_vba=True:
book = load_workbook(self.directory, keep_vba=True)

4. 换个思路用pandas辅助实现需求

如果你的核心目的是把DataFrame插入指定工作表,其实可以用pandas来帮你处理文件读写,绕开直接用openpyxl加载的坑:

import pandas as pd
from openpyxl import load_workbook

# 先把所有工作表读成DataFrame字典
all_sheets = pd.read_excel(self.directory, sheet_name=None)
# 把你要插入的DataFrame替换掉目标工作表(假设目标表叫"TargetSheet")
all_sheets["TargetSheet"] = your_dataframe
# 把所有工作表写回Excel,替换原目标表
with pd.ExcelWriter(self.directory, engine="openpyxl", mode="a", if_sheet_exists="replace") as writer:
    for sheet_name, df in all_sheets.items():
        df.to_excel(writer, sheet_name=sheet_name, index=False)

建议尝试顺序

优先试升级openpyxl,这是成本最低的解决方式;不行再试跳过样式加载;最后再考虑修复文件或者换用pandas的方法。

内容的提问来源于stack exchange,提问作者Emil Zaharia-Kezdi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:17:47