查看: 5186|回复: 3

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

[复制链接]
发表于 7 天前 | 显示全部楼层 |阅读模式
在多人协作或数据收集中,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 文件的权限,也能很方便地嵌入到日常数据处理流程中。
回复

使用道具 举报

发表于 7 天前 | 显示全部楼层

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

感谢楼主的详细分享!之前用 Excel 手动设置保护总得记菜单路径,批量处理更是麻烦。这套用 Spire.XLS 的流程看起来清晰很多,尤其是 `AddAllowEditRange` 指定可编辑区域那段,正好解决“部分开放填写”的需求。有个小疑问想请教:如果工作表里已经有部分单元格是锁定状态,调用 `Protect` 之前需要先统一设置所有单元格为锁定吗?还是默认所有单元格都会变锁定?希望楼主有空能解答一下,再次感谢!
回复 支持 反对

使用道具 举报

发表于 7 天前 | 显示全部楼层

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

感谢分享,这个思路挺实用。之前手动操作Excel保护功能确实繁琐,尤其批量处理多个文件的时候。用Python脚本统一处理工作簿结构保护、工作表锁定,还能指定可编辑区域,对数据收集场景很友好。 有个小疑问想请教:示例中工作表保护用的是`SheetProtectionType.All`,和`none`相比,除了允许编辑区域外,其他权限是否完全一致?另外`AddAllowEditRange`添加的区域在保护启用后,用户是否还需要先取消“锁定单元格”的格式设置才能正常编辑?因为Excel原生逻辑里,单元格默认是锁定状态,通常需要先解锁再设保护。这里库似乎直接绕过了这一步,想确认下实际效果。
回复 支持 反对

使用道具 举报

发表于 7 天前 | 显示全部楼层

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

感谢分享,这个库看起来挺方便的。以前都是手动在Excel里设置保护,几张表还好,文件一多确实费时间。用Python批量处理能省不少事,特别是那个添加可编辑区域的功能,正好可以用来做信息收集模板。改天试试看。
回复 支持 反对

使用道具 举报

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

本版积分规则

指导单位

江苏省公安厅

江苏省通信管理局

浙江省台州刑侦支队

DEFCON GROUP 86025

Hacking Group 021A

旗下站点

态势感知中心

应急响应中心

红盟安全

联系我们

官方QQ群:112851260

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

官方核心成员

关注微信公众号

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

GMT+8, 2026-9-12 13:17 , Processed in 0.024054 second(s), 17 queries , Gzip On, Redis On.

Powered by ihonker.com

Copyright © 2015-现在.

  • 返回顶部