查看: 132|回复: 3

Python+Spire.XLS:Excel工作簿保护与单元格锁定实战指南

[复制链接]
发表于 1 小时前 | 显示全部楼层 |阅读模式
在企业报表分发和数据自动化场景中,Excel文件常包含公式或敏感字段,需要编程方式批量设密与保护。Python通过Spire.XLS库可实现对工作表和单元格的细粒度保护。本文以实例演示密码设置、锁定特定区域、隐藏公式和解锁操作。
  1. pip install Spire.XLS
复制代码

导入模块:
  1. from spire.xls import *
  2. from spire.xls.common import *
复制代码

Excel保护分两级:工作簿保护(阻止添加/删除工作表)和工作表保护(限制单元格编辑)。Spire.XLS中,工作表保护通过 Protect() 方法实现,工作簿保护通过 Workbook.Protect() 方法实现。每个单元格有 Locked 属性,仅在启用保护后生效。

一、基础工作表密码保护

为整个工作表设置密码后所有单元格均被锁定:
  1. workbook = Workbook()
  2. workbook.LoadFromFile("input.xlsx")
  3. sheet = workbook.Worksheets[0]
  4. sheet.Protect("MyPassword", SheetProtectionType.All)
  5. workbook.SaveToFile("ProtectSheet.xlsx", ExcelVersion.Version2013)
  6. workbook.Dispose()
复制代码

SheetProtectionType.All 禁止所有操作,也可选 InsertRows、DeleteColumns 等细粒度类型。

二、锁定特定单元格

先解锁所有单元格,再锁定关键区域:
  1. workbook = Workbook()
  2. workbook.LoadFromFile("input.xlsx")
  3. sheet = workbook.Worksheets[0]
  4. sheet.Range["B3"].Style.Locked = True
  5. sheet.Range["C3"].Style.Locked = False
  6. sheet.Protect("TestPassword", SheetProtectionType.All)
  7. workbook.SaveToFile("LockSpecificCells.xlsx", ExcelVersion.Version2013)
  8. workbook.Dispose()
复制代码

适用于表单类文档:开放填写区,保护公式和标题。

三、锁定整行或整列

遍历行/列设置锁定状态。以下先解锁所有行再锁定第3行:
  1. workbook = Workbook()
  2. workbook.CreateEmptySheet()
  3. sheet = workbook.Worksheets[0]
  4. for i in range(0, 255):
  5.     sheet.Rows[i].Style.Locked = False
  6. sheet.Rows[2].Text = "Locked"
  7. sheet.Rows[2].Style.Locked = True
  8. sheet.Protect("123", SheetProtectionType.All)
  9. workbook.SaveToFile("LockSpecificRow.xlsx", ExcelVersion.Version2013)
复制代码

锁定列类似,将 Columns[3] 设为锁定:
  1. workbook = Workbook()
  2. workbook.CreateEmptySheet()
  3. sheet = workbook.Worksheets[0]
  4. for i in range(0, 255):
  5.     sheet.Rows[i].Style.Locked = False
  6. sheet.Columns[3].Text = "Locked"
  7. sheet.Columns[3].Style.Locked = True
  8. sheet.Protect("123", SheetProtectionType.All)
  9. workbook.SaveToFile("LockSpecificColumn.xlsx", ExcelVersion.Version2013)
复制代码

四、设置可编辑区域(允许编辑范围)

AddAllowEditRange 方法直接定义解锁区域,无需逐个设置 Locked:
  1. workbook = Workbook()
  2. workbook.LoadFromFile("input.xlsx")
  3. sheet = workbook.Worksheets[0]
  4. sheet.AddAllowEditRange("EditableRanges", sheet.Range["B4:E12"])
  5. sheet.Protect("TestPassword", SheetProtectionType.All)
  6. workbook.SaveToFile("ProtectedWithEditableRange.xlsx", ExcelVersion.Version2013)
  7. workbook.Dispose()
复制代码

五、保护工作簿结构

禁止用户增删或重命名工作表:
  1. workbook = Workbook()
  2. workbook.LoadFromFile("input.xlsx")
  3. workbook.Protect("e-iceblue")
  4. workbook.SaveToFile("ProtectWorkbook.xlsx", ExcelVersion.Version2013)
  5. workbook.Dispose()
复制代码

可同时使用工作表保护与工作簿保护实现多层防护。

六、隐藏公式

设置 IsFormulaHidden 属性并启用工作表保护:
  1. workbook = Workbook()
  2. workbook.LoadFromFile("input.xlsx")
  3. sheet = workbook.Worksheets[0]
  4. sheet.AllocatedRange.IsFormulaHidden = True
  5. sheet.Protect("e-iceblue")
  6. workbook.SaveToFile("HideFormulas.xlsx", ExcelVersion.Version2013)
  7. workbook.Dispose()
复制代码

注意:该属性仅在保护生效时才隐藏公式。

七、解除工作表保护

传入密码调用 Unprotect():
  1. workbook = Workbook()
  2. workbook.LoadFromFile("ProtectedSheet.xlsx")
  3. sheet = workbook.Worksheets[0]
  4. sheet.Unprotect("e-iceblue")
  5. workbook.SaveToFile("UnprotectedSheet.xlsx", ExcelVersion.Version2013)
  6. workbook.Dispose()
复制代码

若工作表无密码,直接调用无需参数。

八、实用技巧

批量保护所有工作表:
  1. for i in range(workbook.Worksheets.Count):
  2.     workbook.Worksheets[i].Protect("CommonPassword", SheetProtectionType.All)
复制代码

密码管理:生产环境建议通过环境变量或配置文件读取,避免硬编码。

结合上述方法,可构建兼具数据录入开放性与关键字段保护的 Excel 自动化模板。
回复

使用道具 举报

发表于 1 小时前 | 显示全部楼层

Re: Python+Spire.XLS:Excel工作簿保护与单元格锁定实战指南

感谢分享,非常实用的教程!示范代码清晰,涵盖了基本保护、锁定特定单元格、行、列,以及允许编辑区域和工作簿保护。请问在锁定单元格时,如果工作表中已有一些单元格被合并,会导致问题吗?另外,Spire.XLS是免费的吗?
回复 支持 反对

使用道具 举报

发表于 1 小时前 | 显示全部楼层

Re: Python+Spire.XLS:Excel工作簿保护与单元格锁定实战指南

感谢楼主的详细教程!最近正好在处理批量报表保护的自动化任务,这篇实战指南把常见的保护场景都覆盖到了,特别是“锁定特定单元格”和“可编辑区域”部分,思路非常清晰。之前用openpyxl处理类似的场景需要手动设置单元格格式,Spire.XLS的AddAllowEditRange方法确实省事不少。请问楼主,SheetProtectionType除了All和列出的那几个,还有没有其他常用的细粒度类型可以推荐?另外,在隐藏公式时,如果工作表已经设置了保护,再修改IsFormulaHidden还需要重新保护吗?期待更多分享。
回复 支持 反对

使用道具 举报

发表于 1 小时前 | 显示全部楼层

Re: Python+Spire.XLS:Excel工作簿保护与单元格锁定实战指南

感谢楼主分享,非常实用的教程!对 Spire.XLS 保护功能的几种常见场景讲得很清楚,特别是锁定指定单元格和用 AddAllowEditRange 设置可编辑区域的方法,比逐个设置 Locked 属性要方便很多。想问下,如果工作表中已经有单元格合并的情况,锁定和解锁操作会不会受影响?另外,有没有办法在保护工作表的同时保留筛选或数据验证功能?
回复 支持 反对

使用道具 举报

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

本版积分规则

指导单位

江苏省公安厅

江苏省通信管理局

浙江省台州刑侦支队

DEFCON GROUP 86025

Hacking Group 021A

旗下站点

态势感知中心

应急响应中心

红盟安全

联系我们

官方QQ群:112851260

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

官方核心成员

关注微信公众号

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

GMT+8, 2026-7-7 10:27 , Processed in 0.026524 second(s), 18 queries , Gzip On, Redis On.

Powered by ihonker.com

Copyright © 2015-现在.

  • 返回顶部