在多人协作或数据收集中,Excel 文件经常需要限制结构修改和内容编辑。比如工作簿中的工作表不能被随意增加、删除,已经整理好的结果表不能被误改,但又希望用户能在指定区域填写信息。手动执行 Excel 保护操作比较繁琐,借助 Python 和 Spire.XLS for Python,可以在脚本中自动为工作簿和工作表设置密码保护,并控制允许编辑的单元格范围。
整个过程不依赖本机安装 Microsoft Excel,库本身由 pip 安装即可使用,适合批量处理场景。
环境准备
先用 pip 安装 Spire.XLS for Python:
在 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[0]
- # 使用密码保护当前工作表,不开放额外操作权限
- 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[0]
- # 设置两个允许编辑的区域
- 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[0]
- # 传入密码解除工作表保护
- sheet.Unprotect('password-permission')
- workbook.SaveToFile('解除保护工作表.xlsx', ExcelVersion.Version2016)
- workbook.Dispose()
复制代码
小结
面向 Excel 的权限控制常见有三层需求:保护工作簿结构、锁定单个工作表、在锁定区域内开放填写位置。Spire.XLS for Python 通过 Protect、UnProtect 和 AddAllowEditRange 的组合,可以在代码中快速完成这些设置。与手动操作相比,脚本方式更适合批量处理报表模板或统一管理多个 Excel 文件的权限,也能很方便地嵌入到日常数据处理流程中。 |