Skip to content

Excel xlsx 文件不支持错误解决方案

在使用 pandas 读取 Excel 文件时,您可能会遇到 xlrd.biffh.XLRDError: Excel xlsx file; not supported 错误。本文将详细解释这一问题的原因并提供多种解决方案。

问题原因

这个错误的核心原因是 xlrd 库在 2.0.0 版本及以后不再支持 .xlsx.xlsm 格式的文件。根据官方发布说明,xlrd 现在仅支持传统的 .xls 格式

如果您正在尝试读取以下格式的文件,就会遇到此错误:

  • .xlsx (Excel 2007+ 格式)
  • .xlsm (启用宏的 Excel 文件)

推荐解决方案

方法一:使用 openpyxl 引擎(推荐)

这是最安全、最推荐的解决方案,特别是对于 .xlsm 文件:

python
import pandas as pd

# 安装 openpyxl: pip install openpyxl
df1 = pd.read_excel(
    "your_file.xlsm",  # 或 .xlsx 文件
    engine='openpyxl'
)

TIP

确保您使用的是较新版本的 pandas (至少 1.0.1+),最新版本的 pandas 对这一问题的处理更加明确。

方法二:安装 openpyxl 依赖

在使用上述方法前,需要先安装 openpyxl:

bash
pip install openpyxl

或者添加到您的 requirements.txt 文件中:

txt
pandas>=1.0.1
openpyxl>=3.0.0

不推荐的解决方案

降级 xlrd(存在安全风险)

虽然可以通过降级 xlrd 到 1.2.0 版本来临时解决问题,但强烈不推荐这种方法:

bash
pip install xlrd==1.2.0

安全警告

xlrd 1.2.0 版本存在已知的安全漏洞,使用旧版本可能会使您的应用程序面临潜在的安全风险。

其他替代方案

除了 openpyxl,您还可以考虑以下替代方案:

python
# 使用其他引擎读取 Excel 文件
df = pd.read_excel('file.xlsx', engine='odf')  # 对于 ODS 文件
df = pd.read_excel('file.xlsx', engine='pyxlsb')  # 对于二进制 XLSB 文件

总结

方案推荐度说明
使用 openpyxl 引擎⭐⭐⭐⭐⭐最安全、最现代的解决方案
降级 xlrd不推荐,存在安全风险

对于读取 .xlsx.xlsm 文件,最佳实践是:

  1. 确保 pandas 版本足够新
  2. 安装 openpyxl 依赖
  3. read_excel() 中明确指定 engine='openpyxl'

这样既能保证功能正常,又能确保应用程序的安全性。