python - 使用 Python 密码保护 Excel 文件

标签 python excel openpyxl

我正在尝试使用 Python 密码保护整个 Excel 文件(与"file">“保护工作簿”>“使用密码加密”功能相同)。

我遇到过 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 文档中的选项卡。

最佳答案

对于默认构造的工作簿,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() ,将其分配给工作簿,然后设置工作簿密码。

关于python - 使用 Python 密码保护 Excel 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53618658/

相关文章:

VBA:如何删除Excel中过滤的行?

python - 如何使用 python 脚本将文件上传到 Sharepoint 站点

python - 我应该使用 Python 还是 Assembly 来实现超快速的复制程序

javascript - Jinja2 在 javascript 中访问 dict 列表

python - 创建迭代器以从每个可迭代对象中逐个返回元素

python - Openpyxl 隐藏图例中的系列数据点

python - 输出到excel文件而不覆盖工作表

python - DataFrame 最有效的方法是将小于 40% 的行值更新为 NaN?

sql - 在执行 CopyFromRecordset 时如何让 Excel 将日期视为日期而不是字符串

VBA Excel 中的多线程