Python使用Spire.XLS给Excel工作簿和工作表添加密码保护
在多人协作或数据收集中,Excel 文件经常需要限制结构修改和内容编辑。比如工作簿中的工作表不能被随意增加、删除,已经整理好的结果表不能被误改,但又希望用户能在指定区域填写信息。手动执行 Excel 保护操作比较繁琐,借助 Python 和 Spire.XLS for Python,可以在脚本中自动为工作簿和工作表设置密码保护,并控制允许编辑的单元格范围。整个过程不依赖本机安装 Microsoft Excel,库本身由 pip 安装即可使用,适合批量处理场景。
环境准备
先用 pip 安装 Spire.XLS for Python:
pip install Spire.XLS
在 Python 脚本中引入以下模块:
from spire.xls import *
from spire.xls.common import *
该库提供免费版,可用于小型项目或功能验证。下面几个示例分别演示工作簿保护、工作表保护、可编辑区域设置以及解除保护。
通过密码保护 Excel 工作簿
工作簿保护主要用于限制文件结构发生变化。启用后,其他人不能随意添加、删除、移动或重命名工作表。使用 Workbook.Protect 方法并传入密码即可:
from spire.xls import *
from spire.xls.common import *
workbook = Workbook()
workbook.LoadFromFile('示例文档.xlsx')
# 设置工作簿保护密码
workbook.Protect('password-123')
workbook.SaveToFile('保护工作簿.xlsx', ExcelVersion.Version2016)
workbook.Dispose()
这里需要注意的是,工作簿保护密码并不等同于 Excel 文件的打开密码。前者约束的是文件结构修改,后者约束的是文件访问权限。
解除 Excel 工作簿保护
当需要重新调整工作簿结构时,可以加载已保护的文件并执行 UnProtect。由于文件启用了工作簿密码,加载前需要通过 OpenPassword 属性传入原密码:
from spire.xls import *
from spire.xls.common import *
workbook = Workbook()
# 受保护的工作簿需要先输入密码
workbook.OpenPassword = 'password-123'
workbook.LoadFromFile('保护工作簿.xlsx')
# 解除工作簿保护
workbook.UnProtect()
workbook.SaveToFile('解除保护工作簿.xlsx', ExcelVersion.Version2016)
workbook.Dispose()
保存为新文件后,原文件仍然保留密码,新文件则不再受保护,方便后续流程调整。
使用密码保护 Excel 工作表
如果只需要限制某个工作表的内容编辑,而不影响同文件中的其他工作表,可以针对 Worksheet 对象设置保护。这里使用 Protect 方法,密码之外还需要传入 SheetProtectionType 类型参数。传入 SheetProtectionType.none 表示不授予额外操作权限:
from spire.xls import *
from spire.xls.common import *
workbook = Workbook()
workbook.LoadFromFile('示例文档.xlsx')
worksheet = workbook.Worksheets
# 使用密码保护当前工作表,不开放额外操作权限
worksheet.Protect('password-permission', SheetProtectionType.none)
workbook.SaveToFile('保护工作表.xlsx', ExcelVersion.Version2016)
workbook.Dispose()
SheetProtectionType 还可用于指定允许的操作范围,例如是否允许选定单元格、排序、筛选等。需要按实际权限拆分配置时,可以选择对应的枚举值,不必固定使用 none。
保护工作表并设置可编辑区域
有些表格并不需要完全锁定,比如固定数据需要保护,但姓名、联系方式等填写区域仍然开放。此时可以先调用 AddAllowEditRange 添加允许编辑的区域,再对整个工作表启用 Protect。AddAllowEditRange 的第一个参数是区域名称,第二个参数是单元格范围。
from spire.xls import *
from spire.xls.common import *
workbook = Workbook()
workbook.LoadFromFile('示例文档.xlsx')
sheet = workbook.Worksheets
# 设置两个允许编辑的区域
sheet.AddAllowEditRange('范围一', sheet.Range['A2:A4'])
sheet.AddAllowEditRange('范围二', sheet.Range['A5:C6'])
# 启用工作表保护
sheet.Protect('password-permission', SheetProtectionType.All)
workbook.SaveToFile('允许编辑范围.xlsx', ExcelVersion.Version2016)
workbook.Dispose()
多个可编辑区域可以重复调用 AddAllowEditRange。保护启用后,A2:A4 和 A5:C6 仍然可以填写内容,其他区域则禁止修改。
解除 Excel 工作表保护
当需要重新编辑已保护的工作表时,加载文件后获取对应 Worksheet,再调用 Unprotect 并传入保护密码即可:
from spire.xls import *
from spire.xls.common import *
workbook = Workbook()
workbook.LoadFromFile('保护工作表.xlsx')
sheet = workbook.Worksheets
# 传入密码解除工作表保护
sheet.Unprotect('password-permission')
workbook.SaveToFile('解除保护工作表.xlsx', ExcelVersion.Version2016)
workbook.Dispose()
小结
面向 Excel 的权限控制常见有三层需求:保护工作簿结构、锁定单个工作表、在锁定区域内开放填写位置。Spire.XLS for Python 通过 Protect、UnProtect 和 AddAllowEditRange 的组合,可以在代码中快速完成这些设置。与手动操作相比,脚本方式更适合批量处理报表模板或统一管理多个 Excel 文件的权限,也能很方便地嵌入到日常数据处理流程中。
Re: Python使用Spire.XLS给Excel工作簿和工作表添加密码保护
感谢楼主的详细分享!之前用 Excel 手动设置保护总得记菜单路径,批量处理更是麻烦。这套用 Spire.XLS 的流程看起来清晰很多,尤其是 `AddAllowEditRange` 指定可编辑区域那段,正好解决“部分开放填写”的需求。有个小疑问想请教:如果工作表里已经有部分单元格是锁定状态,调用 `Protect` 之前需要先统一设置所有单元格为锁定吗?还是默认所有单元格都会变锁定?希望楼主有空能解答一下,再次感谢!Re: Python使用Spire.XLS给Excel工作簿和工作表添加密码保护
感谢分享,这个思路挺实用。之前手动操作Excel保护功能确实繁琐,尤其批量处理多个文件的时候。用Python脚本统一处理工作簿结构保护、工作表锁定,还能指定可编辑区域,对数据收集场景很友好。 有个小疑问想请教:示例中工作表保护用的是`SheetProtectionType.All`,和`none`相比,除了允许编辑区域外,其他权限是否完全一致?另外`AddAllowEditRange`添加的区域在保护启用后,用户是否还需要先取消“锁定单元格”的格式设置才能正常编辑?因为Excel原生逻辑里,单元格默认是锁定状态,通常需要先解锁再设保护。这里库似乎直接绕过了这一步,想确认下实际效果。Re: Python使用Spire.XLS给Excel工作簿和工作表添加密码保护
感谢分享,这个库看起来挺方便的。以前都是手动在Excel里设置保护,几张表还好,文件一多确实费时间。用Python批量处理能省不少事,特别是那个添加可编辑区域的功能,正好可以用来做信息收集模板。改天试试看。
页:
[1]