使用Python密码保护Excel文件

时间:2018-12-04 17:42:00

标签: python excel openpyxl

我正在尝试使用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文档中的选项卡。

1 个答案:

答案 0 :(得分:0)

对于默认构造的工作簿,默认情况下初始化security属性:

self.security = DocumentSecurity()

但是,由reading a workbook构造的工作簿不仅是默认构造的,而且还包括默认值。它们也可以通过Parser对象进行操作:

wb_part = _find_workbook_part(self.package) self.parser = WorkbookParser(self.archive, wb_part.PartName[1:], keep_links=self.keep_links) self.parser.parse() wb = self.parser.wb ... self.wb = wb

Parser.init会执行default-construct a Workbook,但随后会用源文档的属性覆盖特定的属性:

self.wb.security = package.workbookProtection

这意味着对于没有安全设置的文件,导入的工作簿对象的None属性的值为security(因此您的错误,因为None显然没有属性workbookPassword)。

您的解决方案是创建一个默认WorkbookProtection(),将其分配给工作簿,然后设置工作簿密码。