我正在尝试使用Python密码保护整个Excel文件(与“文件”>“保护工作簿”>“使用密码加密”具有相同的功能)。
我遇到过openpyxl,它提供的保护功能(https://openpyxl.readthedocs.io/en/stable/protection.html)似乎满足了这一需求。我有以下代码:
from openpyxl import Workbook
from openpyxl import load_workbook
test_spreadsheet = "test.xlsx"
wb = load_workbook(test_spreadsheet)
wb.security.workbookPassword = "password"
但是,出现以下错误:
AttributeError:“ NoneType”对象没有属性“ workbookPassword”
有人知道导致此AttributeError的原因吗?我已经从wb打印了工作表名称,并且正确打印了我的Excel文档中的选项卡。
答案 0 :(得分:0)
对于默认构造的工作簿,默认情况下初始化security
属性:
self.security = DocumentSecurity()
但是,由reading a workbook构造的工作簿不仅是默认构造的,而且还包括默认值。它们也可以通过Parser
对象进行操作:
Parser.init
会执行default-construct a Workbook
,但随后会用源文档的属性覆盖特定的属性:
self.wb.security = package.workbookProtection
这意味着对于没有安全设置的文件,导入的工作簿对象的None
属性的值为security
(因此您的错误,因为None
显然没有属性workbookPassword
)。
您的解决方案是创建一个默认WorkbookProtection()
,将其分配给工作簿,然后设置工作簿密码。