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库,步骤如下:
- 先安装库:
pip install msoffcrypto-tool
- 代码示例:
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
相关产品推荐
相关产品推荐

