pandas+openpyxl读取xlsx报KeyError:无xl/sharedStrings.xml问题咨询
问题成因
该报错由openpyxl引擎的兼容缺陷导致。xlsx本质是zip格式的压缩包,遵循OOXML开放文档标准:当文件内不存在任何字符串类型的单元格内容时,打包过程可以省略xl/sharedStrings.xml这个存储共享字符串的文件,Excel客户端原生支持这种符合标准的文件结构,但部分旧版本openpyxl读取文件时不会预先判断该文件是否存在,会强制从压缩包中读取该文件,找不到时就直接抛出对应KeyError。
解决方法
- 方案一(推荐,适配自动刷新场景):升级openpyxl到最新修复版本,新版本已经补上了该场景的兼容判断。执行以下命令完成升级:
pip install --upgrade openpyxl
升级后原有读取代码无需任何修改,即可正常读取无字符串内容的xlsx文件,完全适配定时自动刷新的需求。 - 方案二(无法升级openpyxl时选用):切换pandas读取xlsx的解析引擎为calamine,该引擎对各类边缘格式的xlsx兼容度更高。首先安装依赖包:
pip install python-calamine
之后修改读取代码的engine参数即可:
import pandas globaltrackerdf = pandas.read_excel( r'C:\Users\Documents\Trackers\Tracker-Global Tracker_V2-2022-06-13.xlsx', sheet_name="Sheet1", engine="calamine" )
- 方案三(临时应急用):手动打开目标Excel文件,在任意空白单元格输入任意字符(比如单个
.)后保存,文件会自动生成缺失的xl/sharedStrings.xml文件,此时用原有代码即可正常读取。该方案需要手动修改源文件,不适合无人值守的定期自动刷新场景。
内容的提问来源于stack exchange,提问作者Pranay Singh
相关产品推荐
相关产品推荐

