Защита паролем файла Excel с использованием Python - PullRequest
0 голосов
/ 04 декабря 2018

Я пытаюсь защитить паролем весь файл Excel (те же функции, что и File> Protect Workbook> Encrypt with Password), используя Python.

Я столкнулся с 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 голосов
/ 21 марта 2019

Для книги, созданной по умолчанию, свойство security инициализируется по умолчанию:

self.security = DocumentSecurity()

Однако книги, созданные с чтениемрабочая книга не просто создана по умолчанию;ими также управляет 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(), назначьте его рабочей книге, а затем установите пароль рабочей книги.

...