保护¶
警告
工作簿或工作表的密码保护仅提供了十分基础的安全。数据未进行加密,所以可以使用各种免费工具进行修改。实际上,规范指出:”工作表或工作簿的保护不应该与文件安全性混淆。这是为了保护你的工作簿免受意外修改的影响,并不能保护免受恶意修改的影响。”
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
>>> ws.protection.sheet = True
>>> ws.protection.enable()
>>> ws.protection.disable()
如果未设置密码,那么用户不需要密码即可禁用工作表保护。否则,他们必要提供密码才能修改保护配置。使用 openpxyl.worksheet.protection.SheetProtection.password()
设置密码:
>>> ws = wb.active
>>> ws.protection.password = '...'