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

pyexcel突然无法打开.xlsx/.xls文件提示Unsupported file type错误

问题根因

这个报错是多个兼容问题、写法问题叠在一起导致的,和业务代码逻辑无关:

  • 已安装依赖缺失xlsx格式对应的解析插件pyexcel-xlsx,本身就不具备xlsx文件解析能力
  • 你使用的pyexcel==0.7.0、pyexcel-io==0.6.6版本组合存在兼容缺陷:当环境中xlrd版本≥2.0.0、chardet版本≥5.0.0时,会直接跳过所有已安装的格式解析插件加载流程,哪怕装了xls解析插件也识别不到
  • 传入pathlib.Path对象给file_name参数时,该版本pyexcel只接受字符串格式路径,不会自动解析Path对象的文件后缀,直接判定为未知文件类型
  • 文件流读取写法错误:打开xls/xlsx这类二进制文件必须用rb二进制读取模式,你用了文本模式r读出来的内容是损坏的;且传文件流时参数名应为file_stream,不是file_name
修复步骤

按顺序操作即可:

  1. 先把有兼容问题的相关依赖完全卸载
pip uninstall -y pyexcel pyexcel-io pyexcel-xls pyexcel-xlsx pyexcel-ezodf xlrd chardet
  1. 安装固定兼容版本的依赖,以下版本组合经过验证不存在兼容问题:
pip install pyexcel==0.7.0 pyexcel-io==0.6.6 pyexcel-xls==0.7.0 pyexcel-xlsx==0.6.0 xlrd==1.2.0 chardet==4.0.0
  1. 修正代码里的错误写法,参考正确示例:
from pathlib import Path
import pyexcel

# 读取本地路径文件的写法,必须把Path对象转成字符串,老版本pyexcel不认Path类型
p = Path("data/jr1305221.xls")
book = pyexcel.get_book(file_name=str(p))

# 传文件流读取的正确写法
with open("data/dummy.xlsx", "rb") as f:
    book = pyexcel.get_book(file_stream=f)

补充说明:上周代码正常现在突然报错,基本是因为没锁依赖版本,pip自动升级了xlrd、chardet这类间接依赖,新版本不兼容老版pyexcel导致的。本地和Docker部署时都要把所有依赖版本固定死,不要加--upgrade参数更新pyexcel相关的包,也不要把xlrd升到2.0.0以上,该版本砍掉了xls之外所有格式的解析支持,装了必报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 12:25:16