You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用openpyxl保护现有Excel工作簿无效问题咨询

问题:使用openpyxl保护现有Excel工作簿无效

我尝试用openpyxl保护已有的Excel工作簿,写了如下代码:

from openpyxl import load_workbook
wb = load_workbook("/path/raw_data.xlsx")
wb.security = WorkbookProtection()
wb.security.workbookPassword = 'password'
wb.security.lockStructure = True
wb.save("/path/protected_raw_data.xlsx")

代码执行后没有报错,也生成了protected_raw_data.xlsx文件,但打开文件后发现工作簿并没有被保护。想问下openpyxl是不是只支持保护新建工作簿,不支持现有工作簿?


解答

openpyxl支持保护现有工作簿,你的代码存在两个关键问题:

  • 未导入WorkbookProtection类,导致密码处理逻辑异常
  • 新建WorkbookProtection实例覆盖了原有工作簿的security对象,丢失了必要的默认配置

修正后的代码如下:

from openpyxl import load_workbook
from openpyxl.workbook.protection import WorkbookProtection

wb = load_workbook("/path/raw_data.xlsx")
# 直接修改现有工作簿的security属性,而非新建实例
wb.security.workbookPassword = 'password'
wb.security.lockStructure = True
wb.save("/path/protected_raw_data.xlsx")

需要注意的细节:

  • 导入WorkbookProtection类是必须的,openpyxl依赖它完成密码的哈希转换(Excel要求存储哈希后的密码,而非明文)
  • 不要替换原有wb.security对象,直接修改其属性即可,否则会破坏工作簿的保护上下文
  • 传入明文密码即可,openpyxl内部会自动转换为Excel兼容的哈希格式

如果需要锁定工作簿窗口,可以额外添加配置:

wb.security.lockWindows = True

内容的提问来源于stack exchange,提问作者tjmhd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 17:41:04