如何打开加密的xlsb文件?msoffcrypto解密报错解决方案咨询
问题:读取加密.xlsb文件触发DecryptionError
我用以下Python代码可正常打开加密的.xlsx文件:
path_to_my_file = r'filename.xlsx' passwd = 'pwd'
import io import msoffcrypto decrypted_workbook = io.BytesIO() with open(path_to_my_file , 'rb') as file: office_file = msoffcrypto.OfficeFile(file) office_file.load_key(password=passwd) office_file.decrypt(decrypted_workbook)
但用这段代码读取受密码保护的.xlsb文件时,出现如下错误:
DecryptionError Traceback (most recent call last) Cell In[56], line 5 3 office_file = msoffcrypto.OfficeFile(file) 4 office_file.load_key(password=passwd) ----> 5 office_file.decrypt(decrypted_workbook) File C:\ProgramData\anaconda3\Lib\site-packages\msoffcrypto\format\ooxml.py:287, in OOXMLFile.decrypt(self, outfile, verify_integrity) 285 outfile.write(obuf) 286 elif self.type == "plain": --> 287 raise exceptions.DecryptionError("Unencrypted document") 288 else: 289 raise exceptions.DecryptionError("Unsupported encryption method") DecryptionError: Unencrypted document
解决办法
这个报错的核心原因是.xlsb属于二进制Excel格式,msoffcrypto的基础OfficeFile类对其加密格式的识别存在问题,需要指定具体的文件类型处理类:
- 直接调用
msoffcrypto针对二进制Excel的OLEFile类
修改代码如下:
import io import msoffcrypto path_to_my_file = r'filename.xlsb' passwd = 'pwd' decrypted_workbook = io.BytesIO() with open(path_to_my_file, 'rb') as file: # 针对xlsb使用OLEFile而非OfficeFile office_file = msoffcrypto.OLEFile(file) office_file.load_key(password=passwd) office_file.decrypt(decrypted_workbook)
- 验证文件加密状态
如果仍报错,先检查文件是否真的设置了打开密码:
with open(path_to_my_file, 'rb') as file: office_file = msoffcrypto.OLEFile(file) print("文件是否加密:", office_file.is_encrypted())
若输出False,说明文件没有打开密码,可能只是工作表保护,这种情况需要用pandas配合openpyxl/xlwings等库处理工作表权限。
- 更新依赖版本
确保msoffcrypto-tool是最新版本,旧版本对xlsb的支持不完善:
pip install --upgrade msoffcrypto-tool
内容的提问来源于stack exchange,提问作者Ivan Ganyushkin
相关产品推荐
相关产品推荐

