Skip to content

Pandas 无法打开 Excel (.xlsx) 文件

问题描述

当使用 Pandas 的 read_excel() 方法打开 .xlsx 文件时,可能会遇到以下错误:

python
import pandas
df = pandas.read_excel('cat.xlsx')

错误信息显示:

xlrd.biffh.XLRDError: Excel xlsx file; not supported

这个错误表示当前安装的 xlrd 库不再支持 .xlsx 格式的 Excel 文件。

根本原因

从 xlrd 2.0.0 版本开始,该库明确移除了对 .xlsx 文件的支持,只保留了对旧版 .xls 格式的支持。这是由于安全漏洞问题,使用 xlrd 1.2.0 或更早版本读取 .xlsx 文件可能存在安全风险。

解决方案

方案一:推荐方法 - 使用 openpyxl 引擎

最安全且推荐的方法是安装 openpyxl 库,并明确指定使用它作为读取引擎:

python
import pandas as pd

# 安装 openpyxl: pip install openpyxl
df = pd.read_excel('cat.xlsx', engine='openpyxl')

提示

对于包含多个工作表的情况,也可以使用 ExcelFile 构造函数:

python
xlsx = pd.ExcelFile('cat.xlsx', engine='openpyxl')
df = pd.read_excel(xlsx, sheet_name='Sheet1')

方案二:升级 Pandas 版本

从 Pandas 1.2.0 版本开始,库已经自动处理了 xlrd 的限制。升级到最新版本可以解决此问题:

bash
pip install --upgrade pandas

注意

即使升级了 Pandas,仍然建议使用 openpyxl 引擎来确保最佳的兼容性和性能。

方案三:不推荐 - 降级 xlrd

虽然技术上可行,但不推荐此方法,因为它存在安全风险:

bash
pip install xlrd==1.2.0

警告

降级到 xlrd 1.2.0 或更早版本可能存在安全漏洞,并且某些 .xlsx 文件的解析可能不准确。建议仅在无法使用其他方法的情况下考虑此方案。

最佳实践

  1. 检查当前环境:确认已安装的库版本
python
import pandas as pd
print(f"Pandas version: {pd.__version__}")

# 检查是否已安装 openpyxl
try:
    import openpyxl
    print("openpyxl is installed")
except ImportError:
    print("openpyxl is not installed")
  1. 一次性安装所有依赖
bash
pip install pandas openpyxl
  1. 明确指定引擎:在所有 read_excel() 调用中明确指定 engine='openpyxl'

总结

解决 Pandas 无法读取 .xlsx 文件的问题,最安全有效的方法是:

  1. 确保 Pandas 版本在 1.0.1 或更高
  2. 安装 openpyxl
  3. 在读取 Excel 文件时明确指定 engine='openpyxl'

这种做法既解决了兼容性问题,又避免了潜在的安全风险,是当前处理 .xlsx 文件的最佳实践。