excel - openpyxl:密码保护整个excel文件(xlsx)
问题描述
我正在尝试找到 pythonic 方法来加密/密码保护 excel xlsx 文件。遇到了 openpyxl,在他们的文档(https://openpyxl.readthedocs.io/en/stable/protection.html)中声明它可以这样做。
AttributeError: 'NoneType' object has no attribute 'workbookPassword'
但是,当我执行以下操作时会提示错误消息。帮助任何人?
from openpyxl import workbook
file = 'test.xlsx' // an existing xlsx
wb = load_workbook(filename = file)
wb.security.workbookPassword = 'test_password'
wb.security.lockStructure = True
编辑:我相信我不正确地使用了该功能,尽管在他们的文档中并不清楚。还提到可以使用此功能设置密码openpyxl.workbook.protection.WorkbookProtection.workbookPassword()
,这在他们的示例中有所不同。
解决方案
您正在谈论以同义方式“加密/密码保护 excel xlsx 文件”的方法。但是,请注意,对于 MS Office,这些是不一样的(尽管有人可能会争论这里的措辞)!这可以从下面的屏幕截图中看出,或者只是打开一个 excel 文件并转到“文件”,然后在“权限”下单击“保护工作簿”。
openpyxl 中的 workbookPassword 仅防止修改工作簿结构。他们的文件指出,这只是意味着
为防止其他用户查看隐藏的工作表、添加、移动、删除或隐藏工作表以及重命名工作表,您可以使用密码保护工作簿的结构。
另请参阅此处的文档。
这仅涉及结构,即添加/删除工作表,但它明确不禁止用户阅读文件,也不禁止编辑(已经可用的)工作表的内容!但是,设置的密码不提供加密意义上的读取保护。
我还没有找到一种使用 openpyxl 实际加密 Excel 文件的方法,但其他软件包可能会这样做。我知道加密的文件可以使用 Python 解密,请参见这篇文章。因此,我猜你也可以用类似的方式加密这些文件,但遗憾的是现在我无法测试这个。
推荐阅读
- bash - 在多个服务上运行 docker compose up 时,项目名称不作为前缀
- azure - 如何使用 GitHub 工作流操作将多个分支部署到 Azure 静态 Web 应用程序?
- javascript - 文件选择器对话框只能在用户激活时显示。怎么解决?
- graphql - 按 ID 或路径查询的 GraphQL 约定
- c# - 如何使用 Azure 客户端 SDK 发送 json 对象而不是字符串
- java - 将json中的字符串json转换为对象java
- python - 通过掩码通过ftp下载文件
- monaco-editor - 如何限制摩纳哥编辑器中的光标(插入符号)移动?
- javascript - 检测X个像素的mouseMove
- terraform - 如何为 AWS ecr IAM 角色解析 json 字符串在 terraform 中不能有前导空格