【问题标题】:Password Protecting an Excel file using Python使用 Python 密码保护 Excel 文件
【发布时间】:2019-05-06 05:12:44
【问题描述】:

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

【问题讨论】:

    标签: python excel openpyxl


    【解决方案1】:

    对于默认构造的工作簿,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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-16
      • 2011-02-06
      • 2013-10-27
      • 2010-10-29
      • 2016-08-19
      • 1970-01-01
      • 2018-12-18
      相关资源
      最近更新 更多