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
文件,最佳实践是:
- 确保 pandas 版本足够新
- 安装 openpyxl 依赖
- 在
read_excel()
中明确指定engine='openpyxl'
这样既能保证功能正常,又能确保应用程序的安全性。