使用Python保护和取消保护Excel工作表和工作簿的完整代码

 更新时间:2026年07月07日 08:26:36   作者:用户835629078051  
在企业数据管理和报表分发场景中,Excel 文件往往包含敏感信息或关键公式,需要防止未经授权的修改,本文将介绍如何使用 Python 对工作表进行密码保护、锁定特定单元格和行列、设置可编辑区域、隐藏公式以及解除保护,感兴趣的小伙伴可以了解下

在企业数据管理和报表分发场景中,Excel 文件往往包含敏感信息或关键公式,需要防止未经授权的修改。手动为每个工作表设置保护密码在文件数量较少时可行,但面对批量处理或自动化生成报表的需求,这种方式显然不够高效。

通过 Python 编程实现 Excel 工作表和工作簿的保护与解保护,可以将安全策略无缝集成到文档生成和分发流程中。本文将介绍如何使用 Python 对工作表进行密码保护、锁定特定单元格和行列、设置可编辑区域、隐藏公式,以及解除保护。

环境准备

本文使用 Spire.XLS for Python 库操作 Excel 文件,通过 pip 安装:

pip install Spire.XLS

在脚本中导入所需模块:

from spire.xls import *
from spire.xls.common import *

保护工作表的基础概念

Excel 的保护机制分为两个层级:

  • 工作表保护:限制对工作表中单元格内容的编辑,可以设置密码,也可以选择性地允许某些操作(如排序、筛选等)。
  • 工作簿保护:限制对工作簿结构的修改,防止用户添加、删除或重命名工作表。

在 Spire.XLS 中,工作表保护通过 Protect() 方法实现,工作簿保护则通过 Workbook.Protect() 方法实现。每个单元格都有一个 Locked 属性,默认情况下所有单元格都是锁定状态,但只有在启用工作表保护后,锁定才会生效。

保护工作表

最简单的保护方式是为整个工作表设置密码。启用保护后,所有单元格默认处于锁定状态,用户无法编辑任何内容:

from spire.xls import *
from spire.xls.common import *

# 创建工作簿并加载文件
workbook = Workbook()
workbook.LoadFromFile("input.xlsx")

# 获取第一个工作表
sheet = workbook.Worksheets[0]

# 使用密码保护工作表
sheet.Protect("MyPassword", SheetProtectionType.All)

# 保存文档
workbook.SaveToFile("ProtectSheet.xlsx", ExcelVersion.Version2013)
workbook.Dispose()

SheetProtectionType.All 表示禁止所有操作。也可以根据需要选择更细粒度的保护类型,如仅禁止插入行、删除列等特定操作。

锁定特定单元格

在多数场景中,并不需要锁定所有内容,而是只保护关键的公式单元格或汇总数据。实现这一目标的关键在于:先将所有单元格设为未锁定,再将需要保护的单元格设为锁定,最后启用工作表保护。

from spire.xls import *
from spire.xls.common import *

workbook = Workbook()
workbook.LoadFromFile("input.xlsx")
sheet = workbook.Worksheets[0]

# 将 B3 单元格设为锁定
sheet.Range["B3"].Style.Locked = True

# 将 C3 单元格设为未锁定(即使工作表受保护也可编辑)
sheet.Range["C3"].Style.Locked = False

# 启用工作表保护
sheet.Protect("TestPassword", SheetProtectionType.All)

workbook.SaveToFile("LockSpecificCells.xlsx", ExcelVersion.Version2013)
workbook.Dispose()

这种方式适用于表单类文档——大部分字段允许用户填写,只有公式和标题等关键区域需要保护。

锁定特定行或列

当需要保护整行或整列数据时,可以通过遍历设置行或列的锁定状态。以下示例先解锁所有行,然后仅锁定第 3 行:

workbook = Workbook()
workbook.CreateEmptySheet()
sheet = workbook.Worksheets[0]

# 解锁所有行
for i in range(0, 255):
    sheet.Rows[i].Style.Locked = False

# 锁定第 3 行
sheet.Rows[2].Text = "Locked"
sheet.Rows[2].Style.Locked = True

# 启用保护
sheet.Protect("123", SheetProtectionType.All)

workbook.SaveToFile("LockSpecificRow.xlsx", ExcelVersion.Version2013)

锁定特定列的方式类似,以下示例锁定第 4 列(D 列):

workbook = Workbook()
workbook.CreateEmptySheet()
sheet = workbook.Worksheets[0]

# 解锁所有行
for i in range(0, 255):
    sheet.Rows[i].Style.Locked = False

# 锁定第 4 列
sheet.Columns[3].Text = "Locked"
sheet.Columns[3].Style.Locked = True

# 启用保护
sheet.Protect("123", SheetProtectionType.All)

workbook.SaveToFile("LockSpecificColumn.xlsx", ExcelVersion.Version2013)

设置可编辑区域

另一种更灵活的方式是在保护工作表的同时,指定某些区域为"允许编辑范围"。用户可以在这些区域内自由编辑,而工作表其他部分仍然受保护:

from spire.xls import *
from spire.xls.common import *

workbook = Workbook()
workbook.LoadFromFile("input.xlsx")
sheet = workbook.Worksheets[0]

# 定义允许编辑的区域
sheet.AddAllowEditRange("EditableRanges", sheet.Range["B4:E12"])

# 保护工作表
sheet.Protect("TestPassword", SheetProtectionType.All)

workbook.SaveToFile("ProtectedWithEditableRange.xlsx", ExcelVersion.Version2013)
workbook.Dispose()

AddAllowEditRange() 方法接受两个参数:区域名称和区域范围。这种方式比逐个设置单元格的 Locked 属性更加直观,特别适合需要在受保护表格中开放数据录入区域的场景。

保护工作簿结构

除了工作表级别的保护,还可以对工作簿整体结构进行保护,防止用户添加、删除或重命名工作表:

from spire.xls import *
from spire.xls.common import *

workbook = Workbook()
workbook.LoadFromFile("input.xlsx")

# 保护工作簿结构
workbook.Protect("e-iceblue")

workbook.SaveToFile("ProtectWorkbook.xlsx", ExcelVersion.Version2013)
workbook.Dispose()

工作簿保护与工作表保护可以同时使用,实现从整体结构到单元格内容的多层防护。

隐藏公式

在包含复杂计算公式的报表中,有时需要让用户看到计算结果但不能查看或修改公式本身。通过设置 IsFormulaHidden 属性并启用保护,可以隐藏工作表中的所有公式:

from spire.xls import *
from spire.xls.common import *

workbook = Workbook()
workbook.LoadFromFile("input.xlsx")
sheet = workbook.Worksheets[0]

# 隐藏已使用区域中的所有公式
sheet.AllocatedRange.IsFormulaHidden = True

# 启用工作表保护以使隐藏生效
sheet.Protect("e-iceblue")

workbook.SaveToFile("HideFormulas.xlsx", ExcelVersion.Version2013)
workbook.Dispose()

需要注意的是,IsFormulaHidden 属性只有在启用工作表保护后才会生效。单独设置该属性不会隐藏公式。

解除工作表保护

解除保护需要提供正确的密码。使用 Unprotect() 方法并传入设置保护时使用的密码即可:

from spire.xls import *
from spire.xls.common import *

workbook = Workbook()
workbook.LoadFromFile("ProtectedSheet.xlsx")
sheet = workbook.Worksheets[0]

# 使用密码解除保护
sheet.Unprotect("e-iceblue")

workbook.SaveToFile("UnprotectedSheet.xlsx", ExcelVersion.Version2013)
workbook.Dispose()

如果工作表没有设置密码保护,可以直接调用 Unprotect() 方法无需传入参数。

实用技巧

保护与可编辑区域的组合策略:在构建数据录入模板时,可以先用 AddAllowEditRange() 开放输入区域,再保护工作表。这样既能防止用户意外修改表头和公式,又不影响正常的业务数据录入。

批量保护多个工作表:遍历工作簿中的所有工作表并统一设置保护密码:

for i in range(workbook.Worksheets.Count):
    sheet = workbook.Worksheets[i]
    sheet.Protect("CommonPassword", SheetProtectionType.All)

密码安全建议:在生产环境中,密码不应硬编码在源代码中。建议使用环境变量或配置文件管理密码,并选择足够强度的密码以防止暴力 破解。

总结

本文介绍了使用 Python 对 Excel 工作表和工作簿进行保护的完整方法,包括基础保护、锁定特定单元格和行列、设置可编辑区域、隐藏公式以及解除保护等操作。这些功能在自动化报表生成、批量文件处理和文档安全管理等场景中具有广泛的实用价值。

结合条件格式、数据验证等功能,可以构建出安全性更高、功能更完善的 Excel 自动化处理方案。

到此这篇关于使用Python保护和取消保护Excel工作表和工作簿的完整代码的文章就介绍到这了,更多相关Python保护和取消保护Excel内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • tensorflow之并行读入数据详解

    tensorflow之并行读入数据详解

    今天小编就为大家分享一篇tensorflow之并行读入数据详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-02-02
  • 在Flask使用TensorFlow的几个常见错误及解决

    在Flask使用TensorFlow的几个常见错误及解决

    这篇文章主要介绍了在Flask使用TensorFlow的几个常见错误及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • python+numpy实现的基本矩阵操作示例

    python+numpy实现的基本矩阵操作示例

    这篇文章主要介绍了python+numpy实现的基本矩阵操作,结合实例形式分析了Python使用numpy模块针对矩阵进行创建、增删查改、索引、运算相关操作实现技巧,注释中包含有详细的说明,需要的朋友可以参考下
    2019-07-07
  • Python垃圾回收机制三种实现方法

    Python垃圾回收机制三种实现方法

    这篇文章主要介绍了Python垃圾回收机制三种实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • 10张动图学会python循环与递归问题

    10张动图学会python循环与递归问题

    今天为大家整理了十张动图GIFS,有助于认识循环、递归、二分检索等概念的具体运行情况。代码实例以Python语言编写,非常不错,感兴趣的朋友跟随小编一起学习吧
    2021-02-02
  • 使用Python进行视频相似度比较实例

    使用Python进行视频相似度比较实例

    这篇文章主要介绍了使用Python进行视频相似度比较实例,本文通过汉明距离算法与图片比较等方法对比两个视频流的相似度,文中提供了部分实现代码与解决思路,需要的朋友可以参考下
    2023-07-07
  • 关于windos10环境下编译python3版pjsua库的问题

    关于windos10环境下编译python3版pjsua库的问题

    pjsua默认绑定的python版本是python 2.4,使用起来有诸多限制,希望可以使用python3调用pjsua的库实现软电话的基础功能。这篇文章主要介绍了windos10环境下编译python3版pjsua库,需要的朋友可以参考下
    2021-10-10
  • Python的字符串示例讲解

    Python的字符串示例讲解

    本文重点讲解字符串的创建,字符串的定义和字符串的常见操作,对Python的字符串不熟悉的同学随小编一起学习吧!
    2021-04-04
  • 基于Python中capitalize()与title()的区别详解

    基于Python中capitalize()与title()的区别详解

    下面小编就为大家分享一篇基于Python中capitalize()与title()的区别详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-12-12
  • Python+OpenCV之图像轮廓详解

    Python+OpenCV之图像轮廓详解

    这篇文章主要为大家详细介绍了Python OpenCV实现图像轮廓的方法,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的可以了解一下
    2022-09-09

最新评论