pandas 本身不支持读取密码保护的 excel 文件,因其底层 openpyxl 等引擎不处理文件级加密,遇“打开权限密码”会抛出 invalidfileexception 错误;仅“编辑密码”不影响 read_excel 正常读取。

直接回答:Pandas 本身不支持读取密码保护的 Excel 文件
你无法用 pandas.read_excel() 直接打开设置了“打开权限密码”(即输入密码才能打开文件)的 .xlsx 文件。它底层依赖 openpyxl 或 xlsxwriter,而这两个库都不处理文件级加密——它们会直接抛出 InvalidFileException 或类似错误,比如:openpyxl.utils.exceptions.InvalidFileException: openpyxl does not support the encryption of Excel files。
为什么不能绕过密码直接读?
Excel 的“打开密码”是 AES 加密(Office 2007+ 默认用 AES-128),密钥派生依赖 salt、迭代次数和用户密码,且完整解密必须在打开时由 Excel 应用或兼容库完成。Pandas 和 openpyxl 都没实现这一整套密钥派生与解密流程。
- “编辑密码”(修改权限密码)不影响读取,
read_excel能正常工作 - 只有“打开密码”(即双击文件弹窗要输密码那种)才真正阻断读取
- 第三方工具如
msoffcrypto-tool可解密,但需你提供正确密码,且仅适用于传统加密格式(Office 2003 的 XOR + RC4)或部分较旧的 AES 封装
可行方案:用 msoffcrypto-tool + openpyxl 中转
目前最稳定的方式是先用 msoffcrypto-tool 解密内存中的文件流,再交给 openpyxl 加载,最后传给 pandas。注意:这仅对 Office 2003–2013 的“标准加密”(非现代 Office 365 的“信息权限管理 IRM”)有效。
安装依赖:
Python 3.14.2是Python编程语言在2025年12月5日发布的稳定版本,属于3.14系列的第二个维护更新。该版本包含了18项修复,重点解决了多进程、数据类及正则表达式等模块的回归问题,并修复了CVE-2025-12084等安全漏洞。此版本标志着自由线程模式(移除GIL)正式获得官方支持,是Python发展的重要里程碑。
pip install msoffcrypto-tool openpyxl pandas
示例代码:
import pandas as pd
import msoffcrypto
import openpyxl
from io import BytesIO
<p>with open("protected.xlsx", "rb") as f:
file = msoffcrypto.OfficeFile(f)
file.load_key(password="your_password") # 必须填对密码
decrypted = BytesIO()
file.decrypt(decrypted)</p><pre class="brush:python;toolbar:false;"># 重置指针,让 openpyxl 读取
decrypted.seek(0)
df = pd.read_excel(decrypted, engine="openpyxl")
- 如果密码错误,
file.load_key()不报错,但file.decrypt()会抛ValueError: Wrong password -
engine="openpyxl"必须显式指定,否则read_excel可能 fallback 到xlrd(已弃用)或失败 - 该方法不支持“证书加密”或 Microsoft Information Protection (MIP) 标签加密的文件
遇到“Unsupported format, or corrupt file”怎么办?
常见于两种情况:一是文件实际用了 Office 365 新版 AES 加密(msoffcrypto-tool 尚未支持),二是文件损坏或密码不匹配。
- 用 Excel 手动打开确认密码是否正确、能否正常渲染表格
- 检查文件是否被另存为“启用宏的 .xlsm”——这类文件即使加了打开密码,
msoffcrypto-tool也可能因宏签名校验失败而拒绝解密 - 尝试用
file.is_encrypted属性验证:print(file.is_encrypted),返回False说明根本没加密,可能是其他问题 - Windows 下可临时用 COM 接口调用 Excel 实例(需本机装 Excel),但不可靠、难部署、不跨平台
真正受强加密保护的 Excel 文件,没有密码就无法读取——这不是 Pandas 的限制,而是加密设计本身的目的。别指望绕过,重点是确认密码来源是否可靠、加密类型是否在工具链支持范围内。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










