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

openpyxl 3.0.9读取含损坏图片的Excel表格时触发KeyError异常问题

openpyxl 读取含损坏图片的Excel文件抛出KeyError的解决方案

问题根因

报错由目标Excel文件元数据损坏导致:文件内某张图片的绘图关系记录指向了不存在的xl/drawings/NULL路径。LibreOffice的容错机制会自动跳过不存在的资源仅显示占位符,openpyxl 3.0.9版本的默认读取逻辑未对这类异常做捕获,因此直接抛出错误。

解决方案

方案1:不需要读取图片时直接绕过(最便捷)

调用load_workbook时添加ignore_images=True参数,跳过所有图片的解析流程,不会影响表格文本/数值内容的读取:

wb = load_workbook('pritelli/FW21 WOMAN 27.09.21.xlsx', ignore_images=True)

方案2:必须保留图片读取能力时修改源码容错

找到对应Python环境下的openpyxl/reader/drawings.py文件,定位到find_images函数中读取图片的代码段,添加异常捕获逻辑跳过损坏资源:

# 原有代码
# image = Image(BytesIO(archive.read(dep.target)))
# images.append(image)

# 修改为以下代码
try:
    img_bin = archive.read(dep.target)
    image = Image(BytesIO(img_bin))
    images.append(image)
except KeyError:
    # 跳过不存在的损坏图片资源,不抛出异常
    pass

方案3:升级openpyxl版本

该类资源不存在的异常捕获逻辑已在openpyxl 3.1及以上版本修复,直接升级到最新稳定版即可原生解决问题:

pip install --upgrade openpyxl

方案4:修复源文件

用LibreOffice打开目标Excel,找到显示占位符的异常图片,删除后重新插入原图并保存,修复后的文件即可直接被openpyxl 3.0.9正常读取。


内容的提问来源于stack exchange,提问作者aikipooh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 21:54:00