当打开受保护的工作簿时,会引发如下错误:
import xlrd
book = xlrd.open_workbook('encrypted.xls')
Error:
Traceback (most recent call last):
...
xlrd.biffh.XLRDError: Workbook is encrypted
当工作表被标记为受保护的工作表时会发生这种情况
注1:设置方式(Excel > 工具 > 保护 > 保护工作表/簿)
注2:设置保护工作表/簿时,密码为可选,若不设置密码,则会使用默认密码 'VelvetSweatshop' ,此密码后续将会使用到
但目前 xlrd 貌似无法直接处理此类带有保护的文件
针对此情况有两种解决方案:
1、手动撤销保护
打开 Excel 文件,选择工具 > 保护 > 撤销工作表/簿保护,输入密码撤销保护,再使用 xlrd 操作
2、若你有100+个Excel文件需要处理,方案1显然效率不高,需要进行批量撤销操作
这就需要使用到另一个 Python 库(msoffcrypto)来解密各种 MS Office 文件
以下为该库的GitHub地址:
https://github.com/nolze/msoffcrypto-tool
pip安装即可:
pip install msoffcrypto-tool
以下为简要的使用方式,详细请参考GitHub:
-------------------------------------------------------------------------------------------------------------------------
import msoffcrypto
file = msoffcrypto.OfficeFile(open('encrypted.xls', 'rb')) # 读取原文件
file.load_key(password='VelvetSweatshop') # 填入设置保护时设置的密码, 默认密码为 'VelvetSweatshop'
file.decrypt(open('decrypted.xls', 'wb')) # 解密后保存为新文件, 新文件无保护,可直接使用 xlrd 读取内容
之后就可以使用xlrd正常打开并操作解密后的文件 decrypted.xls 了
-------------------------------------------------------------------------------------------------------------------------