保护

警告

保护工作簿或工作表的密码只提供相当基本的安全级别。数据没有加密,因此可以通过任意数量的免费可用工具进行修改。实际上,规范规定:“工作表或工作簿元素保护不应与文件安全性混淆。它的目的是使您的工作簿不受无意修改的影响,并且不能保护它不受恶意修改的影响。”

OpenPYXL支持保护工作簿和工作表不被修改。除非明确配置了另一个算法,否则open xml“legacy password hash algorithm”用于生成哈希密码值。

工作簿保护

要防止其他用户查看隐藏工作表、添加、移动、删除或隐藏工作表以及重命名工作表,可以使用密码保护工作簿的结构。可以使用 openpyxl.workbook.protection.WorkbookProtection.workbookPassword() 属性:

>>> wb.security.workbookPassword = '...'
>>> wb.security.lockStructure = True

同样,通过设置另一个密码,可以防止从共享工作簿中删除更改跟踪和更改历史记录。此密码可以使用 openpyxl.workbook.protection.WorkbookProtection.revisionsPassword() 属性:

>>> wb.security.revisionsPassword = '...'

上的其他属性 openpyxl.workbook.protection.WorkbookProtection 对象精确地控制有哪些限制,但只有在设置了适当的密码时才会强制执行这些限制。

如果需要在不使用默认哈希算法的情况下设置原始密码值,则提供特定的setter函数-例如:

hashed_password = ...
wb.security.set_workbook_password(hashed_password, already_hashed=True)

工作表保护

工作表的各个方面也可以通过在 openpyxl.worksheet.protection.SheetProtection 对象。与工作簿保护不同,可以使用或不使用密码启用工作表保护。使用启用了板材保护 openpxyl.worksheet.protection.SheetProtection.sheet 属性或调用 enable()disable() ::

>>> ws = wb.active
>>> wb.protection.sheet = True
>>> wb.protection.enable()
>>> wb.protection.disable()

如果未指定密码,用户可以禁用配置的工作表保护而不指定密码。否则,它们必须提供密码才能更改配置的保护。密码是使用 openpxyl.worksheet.protection.SheetProtection.password() 属性:

>>> ws = wb.active
>>> ws.protection.password = '...'