SharePoint下载XLSB文件格式无效 pandas读取KeyError报错求助
问题核心原因
- 你犯了最基础的格式不匹配错误:SharePoint上的源文件明确是
train_data.xlsx格式,本地保存时硬将后缀改为.xlsb。xlsx是基于ZIP的OOXML开放格式,xlsb是二进制压缩格式,二者内部文件结构完全不同,Excel自然会提示格式/扩展名无效,专门解析xlsb的pyxlsb引擎找不到xlsb专属的xl/_rels/workbook.bin.rels结构报KeyError也是必然结果。 - 额外存在一个高概率隐性问题:SharePoint的文件接口在鉴权失效、权限不足时,哪怕返回200状态码,响应体也经常是登录跳转页/权限提示页的HTML内容,根本不是真实的文件二进制流,这种情况下哪怕后缀改对了也打不开文件。
修复步骤
- 修正保存路径的文件后缀,和源文件格式保持一致,不要手动篡改后缀:
# 把原来的xlsb后缀改成和源文件一致的xlsx download_file_path = ROOT_DIR / "download_test.xlsx" - 增加文件有效性校验,避免下载到无效的HTML内容:
with open(download_file_path, "wb") as local_file: local_file.write(response.content) # xlsx本质是zip压缩包,文件头固定为PK开头,校验不通过就说明下载内容不对 with open(download_file_path, "rb") as f: if f.read(4) != b'PK\x03\x04': raise RuntimeError("下载内容不是有效Excel文件,请检查ctx上下文的登录凭据是否有效、当前账号对目标文件是否有读取权限") - 读取文件时使用匹配xlsx格式的解析引擎,不要用xlsb专属的pyxlsb:
先安装openpyxl依赖:pip install openpyxl,之后读取代码改为:
如果你确实需要使用xlsb格式,先确保xlsx文件可以正常下载、本地用Excel能正常打开后,手动在Excel内执行「另存为」选择xlsb格式保存,再用pyxlsb读取即可,直接改文件后缀没有任何格式转换的作用。import pandas as pd df = pd.read_excel("download_test.xlsx", engine="openpyxl")
避坑提示
- 不要默认接口返回200状态码就代表请求成功,针对SharePoint这类企业级系统的文件接口,一定要校验返回内容的实际格式。
- Excel不同格式对应的解析引擎完全不通用,不要混用:
- xlsx/xlsm格式:用
openpyxl引擎 - xlsb二进制格式:用
pyxlsb引擎 - 旧版xls格式:用低版本
xlrd==1.2.0引擎
- xlsx/xlsm格式:用
内容的提问来源于stack exchange,提问作者matt.aurelio
相关产品推荐
相关产品推荐

