前言

日常做报表自动化、业务数据台账、后端批量生成Excel模板时,相信大家都遇到过一个头疼问题:同事不小心误改表头、乱动公式单元格,或是随手篡改固定配置数据,导致整张表格失效、业务数据出错。

这时候最省事的办法,就是用 Python 给 Excel 做单元格锁定保护。今天就带大家手把手实操,搞定指定区域锁定、隐藏公式单元格、工作表加密防护、多Sheet批量锁定和解密,所有代码拿过去就能直接用在自己的自动化脚本里。


一、环境配置

1. 免费库安装

直接 pip 安装免费版处理库就行,命令复制到终端运行即可:

pip install Spire.Xls.Free

2. 模块导入

安装完之后,在 Python 脚本里导入对应模块,后续所有功能都依赖这两个引用:

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

二、Excel 单元格锁定核心原理

很多新手容易踩坑:直接给单元格设锁定,结果完全没用。其实 Excel 的单元格锁定不是单点设置就行,有固定逻辑要遵循:

  1. Excel 默认所有单元格都是锁定状态,但如果不开工作表保护,锁了也能随便改;
  2. 想只锁部分区域、其他地方正常编辑,得先把整张表全部解锁,再单独给目标单元格加锁定;
  3. 最后一定要开启工作表保护、设置密码,锁定规则才会真正生效。

给大家梳理好一套通用开发流程,照着做不会出错:

  1. 先全局解锁整张工作表所有单元格;
  2. 选中需要保护的单元格、行列或自定义区域,单独开启锁定;
  3. 给工作表设置保护密码;
  4. 保存文件,顺手释放资源避免占用。

三、Python 代码示例

下面所有案例统一用保护密码 Admin@2025,大家直接改成自己业务需要的密码就行。

示例1:锁定指定单元格区域,保留其余区域可编辑

日常用得最多的场景:锁住报表表头、固定参数列,只开放业务数据行给别人编辑,防止误改框架。

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

# 加载本地Excel文件
workbook = Workbook()
workbook.LoadFromFile("demo.xlsx")
worksheet = workbook.Worksheets[0]

# 关键一步:先全局解锁所有单元格
worksheet.Range.Style.Locked = False

# 按需锁定不同范围,按需注释选用就行
# 锁定单个单元格 A1
worksheet.Range["A1"].Style.Locked = True
# 锁定整片区域 A1:C5
worksheet.Range["A1:C5"].Style.Locked = True
# 锁定第1行,适合固定表头
worksheet.Rows[0].Style.Locked = True
# 锁定A列,适合固定字段列
worksheet.Columns[0].Style.Locked = True

# 给工作表加上密码保护
worksheet.Protect("Admin@2025")

# 保存新文件并释放资源
workbook.SaveToFile("指定区域锁定.xlsx", ExcelVersion.Version2016)
workbook.Dispose()

单元格被锁定后,编辑单元格时会出现警告:
锁定单元格

示例2:自动锁定公式单元格并隐藏公式内容

表格里带计算公式的单元格最怕被乱改,这个脚本可以自动识别所有带公式的单元格,一键锁定还能隐藏公式内容,别人只能看结果,看不到也改不了公式。

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

workbook = Workbook()
workbook.LoadFromFile("demo.xlsx")
worksheet = workbook.Worksheets[0]

# 先全局解锁整张表格
worksheet.Range.Style.Locked = False

# 遍历表格所有已使用的单元格
used_range = worksheet.AllocatedRange
for cell in used_range:
    # 判断是否为公式单元格
    if cell.HasFormula:
        cell.Style.Locked = True
        cell.HideFormula = True  # 隐藏公式内容

# 启用密码保护
worksheet.Protect("Admin@2025")

workbook.SaveToFile("公式单元格锁定.xlsx", ExcelVersion.Version2016)
workbook.Dispose()

示例3:批量锁定工作簿所有工作表

遇到多 Sheet 的 Excel 模板,一个个手动锁太麻烦,这个代码可以一键遍历所有工作表,统一设置锁定区域和保护密码,批量搞定模板防护。

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

workbook = Workbook()
workbook.LoadFromFile("多工作表模板.xlsx")

# 循环遍历所有工作表统一配置
for sheet in workbook.Worksheets:
    sheet.Range.Style.Locked = False
    sheet.Range["A1:C5"].Style.Locked = True
    sheet.Protect("Admin@2025")

workbook.SaveToFile("批量工作表锁定.xlsx", ExcelVersion.Version2016)
workbook.Dispose()

示例4:解除工作表密码保护

后续需要编辑被锁定的表格时,直接用这段代码,输入原来的保护密码,就能撤销锁定,恢复所有单元格自由编辑。

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

workbook = Workbook()
workbook.LoadFromFile("指定区域锁定.xlsx")
worksheet = workbook.Worksheets[0]

# 输入原密码解除保护
worksheet.Unprotect("Admin@2025")

workbook.SaveToFile("解除工作表保护.xlsx", ExcelVersion.Version2016)
workbook.Dispose()

四、开发注意事项

给大家整理了几个实操里容易踩的坑,提前避开少走弯路:

  1. 单纯设置 Locked 属性只是做个标记,必须开启工作表保护才会真正锁住单元格;
  2. 每次操作完 Excel 一定要调用 Dispose() 释放资源,不然容易出现进程常驻、文件被占用无法修改的问题;
  3. 尽量用现代 xlsx 格式开发,老式 xls 格式对工作表保护的兼容性很差,容易出异常;
  4. 这个库不用本地安装 Office、WPS,直接部署在服务器、后台定时任务里就能跑;
  5. 解锁工作表时,输入的密码必须和设置保护时一致,否则无法解除锁定。

五、总结

总的来说,我们日常做 Excel 自动化,单元格锁定和数据防护是刚需。这篇教程覆盖了指定区域锁定、公式隐藏加密、多工作表批量防护、密码解锁这些高频用法,只要记住先全局解锁、再局部锁定、最后加密码保护这个核心逻辑就行。

代码可直接复用,嵌入到报表生成、数据导出、模板固化等 Python 自动化项目里,完全可以当作 Excel 数据防护的通用方案来用。

更多推荐