查看: 166|回复: 0

Python使用Spire.XLS给Excel工作簿和工作表添加密码保护

[复制链接]
发表于 半小时前 | 显示全部楼层 |阅读模式
在多人协作或数据收集中,Excel 文件经常需要限制结构修改和内容编辑。比如工作簿中的工作表不能被随意增加、删除,已经整理好的结果表不能被误改,但又希望用户能在指定区域填写信息。手动执行 Excel 保护操作比较繁琐,借助 Python 和 Spire.XLS for Python,可以在脚本中自动为工作簿和工作表设置密码保护,并控制允许编辑的单元格范围。

整个过程不依赖本机安装 Microsoft Excel,库本身由 pip 安装即可使用,适合批量处理场景。

环境准备

先用 pip 安装 Spire.XLS for Python:
  1. pip install Spire.XLS
复制代码

在 Python 脚本中引入以下模块:
  1. from spire.xls import *
  2. from spire.xls.common import *
复制代码

该库提供免费版,可用于小型项目或功能验证。下面几个示例分别演示工作簿保护、工作表保护、可编辑区域设置以及解除保护。

通过密码保护 Excel 工作簿

工作簿保护主要用于限制文件结构发生变化。启用后,其他人不能随意添加、删除、移动或重命名工作表。使用 Workbook.Protect 方法并传入密码即可:
  1. from spire.xls import *
  2. from spire.xls.common import *
  3. workbook = Workbook()
  4. workbook.LoadFromFile('示例文档.xlsx')
  5. # 设置工作簿保护密码
  6. workbook.Protect('password-123')
  7. workbook.SaveToFile('保护工作簿.xlsx', ExcelVersion.Version2016)
  8. workbook.Dispose()
复制代码

这里需要注意的是,工作簿保护密码并不等同于 Excel 文件的打开密码。前者约束的是文件结构修改,后者约束的是文件访问权限。

解除 Excel 工作簿保护

当需要重新调整工作簿结构时,可以加载已保护的文件并执行 UnProtect。由于文件启用了工作簿密码,加载前需要通过 OpenPassword 属性传入原密码:
  1. from spire.xls import *
  2. from spire.xls.common import *
  3. workbook = Workbook()
  4. # 受保护的工作簿需要先输入密码
  5. workbook.OpenPassword = 'password-123'
  6. workbook.LoadFromFile('保护工作簿.xlsx')
  7. # 解除工作簿保护
  8. workbook.UnProtect()
  9. workbook.SaveToFile('解除保护工作簿.xlsx', ExcelVersion.Version2016)
  10. workbook.Dispose()
复制代码

保存为新文件后,原文件仍然保留密码,新文件则不再受保护,方便后续流程调整。

使用密码保护 Excel 工作表

如果只需要限制某个工作表的内容编辑,而不影响同文件中的其他工作表,可以针对 Worksheet 对象设置保护。这里使用 Protect 方法,密码之外还需要传入 SheetProtectionType 类型参数。传入 SheetProtectionType.none 表示不授予额外操作权限:
  1. from spire.xls import *
  2. from spire.xls.common import *
  3. workbook = Workbook()
  4. workbook.LoadFromFile('示例文档.xlsx')
  5. worksheet = workbook.Worksheets[0]
  6. # 使用密码保护当前工作表,不开放额外操作权限
  7. worksheet.Protect('password-permission', SheetProtectionType.none)
  8. workbook.SaveToFile('保护工作表.xlsx', ExcelVersion.Version2016)
  9. workbook.Dispose()
复制代码

SheetProtectionType 还可用于指定允许的操作范围,例如是否允许选定单元格、排序、筛选等。需要按实际权限拆分配置时,可以选择对应的枚举值,不必固定使用 none。

保护工作表并设置可编辑区域

有些表格并不需要完全锁定,比如固定数据需要保护,但姓名、联系方式等填写区域仍然开放。此时可以先调用 AddAllowEditRange 添加允许编辑的区域,再对整个工作表启用 Protect。AddAllowEditRange 的第一个参数是区域名称,第二个参数是单元格范围。
  1. from spire.xls import *
  2. from spire.xls.common import *
  3. workbook = Workbook()
  4. workbook.LoadFromFile('示例文档.xlsx')
  5. sheet = workbook.Worksheets[0]
  6. # 设置两个允许编辑的区域
  7. sheet.AddAllowEditRange('范围一', sheet.Range['A2:A4'])
  8. sheet.AddAllowEditRange('范围二', sheet.Range['A5:C6'])
  9. # 启用工作表保护
  10. sheet.Protect('password-permission', SheetProtectionType.All)
  11. workbook.SaveToFile('允许编辑范围.xlsx', ExcelVersion.Version2016)
  12. workbook.Dispose()
复制代码

多个可编辑区域可以重复调用 AddAllowEditRange。保护启用后,A2:A4 和 A5:C6 仍然可以填写内容,其他区域则禁止修改。

解除 Excel 工作表保护

当需要重新编辑已保护的工作表时,加载文件后获取对应 Worksheet,再调用 Unprotect 并传入保护密码即可:
  1. from spire.xls import *
  2. from spire.xls.common import *
  3. workbook = Workbook()
  4. workbook.LoadFromFile('保护工作表.xlsx')
  5. sheet = workbook.Worksheets[0]
  6. # 传入密码解除工作表保护
  7. sheet.Unprotect('password-permission')
  8. workbook.SaveToFile('解除保护工作表.xlsx', ExcelVersion.Version2016)
  9. workbook.Dispose()
复制代码

小结

面向 Excel 的权限控制常见有三层需求:保护工作簿结构、锁定单个工作表、在锁定区域内开放填写位置。Spire.XLS for Python 通过 Protect、UnProtect 和 AddAllowEditRange 的组合,可以在代码中快速完成这些设置。与手动操作相比,脚本方式更适合批量处理报表模板或统一管理多个 Excel 文件的权限,也能很方便地嵌入到日常数据处理流程中。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

指导单位

江苏省公安厅

江苏省通信管理局

浙江省台州刑侦支队

DEFCON GROUP 86025

Hacking Group 021A

旗下站点

态势感知中心

应急响应中心

红盟安全

联系我们

官方QQ群:112851260

官方邮箱:security#ihonker.org(#改成@)

官方核心成员

关注微信公众号

Archiver|手机版|小黑屋| ( 沪ICP备2021026908号 )

GMT+8, 2026-9-5 13:58 , Processed in 0.024358 second(s), 18 queries , Gzip On, Redis On.

Powered by ihonker.com

Copyright © 2015-现在.

  • 返回顶部