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

Python打开加密Excel报错:NameError: 'unprotect_xslx'未定义

解决受密码保护Excel文件的读取问题

先修复你现有代码的错误

你当前的NameError完全是因为函数名拼写错误:定义的是unprotect_xlsx,调用时写成了unprotect_xslx(把x和l写反了)。除此之外,代码还有几个小问题,一起修正后如下:

import pandas as pd
import win32com.client

def unprotect_xlsx(filename):
    xcl = win32com.client.Dispatch('Excel.Application')
    pw_str = 'Protektor'
    # 如果是打开文件的密码,要在open时指定Password参数
    wb = xcl.workbooks.open(filename, Password=pw_str)
    # 如果是工作表保护(能打开但编辑受限),才启用下面两行,按需选择
    # wb.Unprotect(pw_str)
    # wb.UnprotectSharing(pw_str)
    xcl.DisplayAlerts = False
    wb.Save()
    xcl.Quit()  # 之前变量名写错成xsc,现在修正为xcl

if __name__ == '__main__':
    # 路径用原始字符串避免转义字符解析错误
    filename = r'C:\my\Cost.xlsx'
    unprotect_xlsx(filename)  # 修正函数名拼写

    df = pd.read_excel(filename)
    print(df)

更简洁的跨平台方案:用msoffcrypto-tool

如果不想依赖本地安装的Excel(Win32COM需要),可以用专门处理加密Office文件的msoffcrypto-tool库,步骤如下:

  1. 先安装库:
pip install msoffcrypto-tool
  1. 代码示例:
import pandas as pd
import msoffcrypto-tool
import io

# 读取加密文件并解密到内存
with open(r'C:\my\Cost.xlsx', 'rb') as f:
    office_file = msoffcrypto-tool.OfficeFile(f)
    office_file.load_key(password='Protektor')
    # 解密到内存字节流对象
    decrypted_stream = io.BytesIO()
    office_file.decrypt(decrypted_stream)

# 用Pandas读取解密后的内容
df = pd.read_excel(decrypted_stream)
print(df)

这种方法不需要本地安装Excel,Windows、Linux、Mac都能用,适合批量处理场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 21:53:31