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

使用pandas读取Excel文件报错xlrd.biffh.XLRDError:工作簿已加密

报错原因

xlrd.biffh.XLRDError: Workbook is encrypted 报错表示xlrd库检测到目标xls文件存在加密/保护标识,即便手动打开无需输入密码,也可能是文件被设置了工作表/工作簿保护、下载时被网站添加了弱加密标记,或是非xls格式文件修改后缀伪装导致的误判。

解决方案

按优先度从高到低排列:

方案1:使用msoffcrypto-tool解密(跨平台通用)

该方案适用于绝大多数带弱加密、无密码保护的xls文件,无需本地安装Excel。

  • 第一步:安装依赖库
pip install msoffcrypto-tool pandas xlrd
  • 第二步:使用如下代码读取文件
import msoffcrypto
import pandas as pd
import io

decrypted_stream = io.BytesIO()
with open(filepath, 'rb') as f:
    office_file = msoffcrypto.OfficeFile(f)
    # 手动打开无需密码则password传空字符串,有密码填写实际密码即可
    office_file.load_key(password='')
    office_file.decrypt(decrypted_stream)

# 指针移到流开头后读取
decrypted_stream.seek(0)
df = pd.read_excel(decrypted_stream, engine='xlrd')

方案2:检查是否为伪装xls文件

部分网站导出的xls文件本质是HTML表格或CSV格式修改后缀而来,xlrd会误判为加密。你可以用普通文本编辑器打开文件查看开头标识,如果存在<html>、<table>等标签,直接用read_html读取即可:

dfs = pd.read_html(filepath)
# read_html返回文件中所有表格的列表,按需选取对应下标的表即可
df = dfs[0]

方案3:调用本地Excel转存(仅Windows可用)

如果上述方案都无效,可模拟手动打开文件再另存的操作,自动清除加密标识,要求本地已安装Excel软件:

  • 第一步:安装依赖
pip install pywin32 pandas xlrd
  • 第二步:执行转存和读取
import win32com.client as win32
import pandas as pd
import os

excel = win32.gencache.EnsureDispatch('Excel.Application')
excel.Visible = False
# 打开原文件,无密码则Password参数留空
wb = excel.Workbooks.Open(os.path.abspath(filepath), Password='')
# 另存为无加密的新xls文件
new_path = os.path.abspath(f'decrypted_{os.path.basename(filepath)}')
wb.SaveAs(new_path, FileFormat=56) # FileFormat=56对应xls格式
wb.Close()
excel.Quit()

# 读取转存后的文件
df = pd.read_excel(new_path, engine='xlrd')
注意事项
  • xlrd 2.0+版本仅支持xls格式读取,如果你读取的是xlsx格式文件,可指定engine为openpyxl测试
  • 部分老旧版本的xlrd(如1.2.0)可直接读取部分弱加密的xls文件,也可尝试降级xlrd版本验证

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 19:54:03