
用 Python 批量处理 Excel 文件时“保护”这个需求经常被误解。很多刚接触 openpyxl 的开发者以为只要在代码里传一个 passwordExcel 文件就无法被别人打开也有人写完数据后直接把工作簿发给业务方结果对方顺手改了公式第二天的统计就出错了。真正的问题是Excel 里的保护并不是一个统一功能而是分成工作表保护、工作簿保护、文件打开密码三个层次。它们解决的问题不同openpyxl 对它们的支持程度也不同。接下来的内容围绕一份带公式的工作表展开。先说明三种保护机制分别控制什么再给出用 openpyxl 添加工作表保护、工作簿结构保护、用 msoffcrypto 读取加密文件的完整脚本然后把解除保护和常见报错整理成排查清单。最后会给出适合生产环境的保护策略。1. 先分清 Excel 保护机制的三层含义1.1 工作表保护解决的是“表内能不能改”工作表保护通常指 Excel 的 Review 菜单里的 Protect Sheet 功能。它的核心对象是单元格、行列、筛选、排序、对象和场景。在 Excel 的底层模型中每个单元格都有一个 Locked 属性和 Hidden 属性。单元格默认情况下是 LockedTrue、HiddenFalse但这两个属性并不会立刻生效。只有当工作表的保护开关被打开Locked 属性才会起作用LockedTrue 的单元格不能被用户编辑HiddenTrue 的单元格会把公式隐藏用户选中该单元格时公式栏不会显示公式内容。这层保护适合用来防止误改。例如一张员工奖金测算表目标奖金和完成率在某个固定区域实际发放金额必须由公式计算那么可以把公式单元格锁定并隐藏把完成率输入区域解锁。这样用户打开 Excel 后只有完成率可以修改。需要特别注意工作表保护不是加密。它不会阻止别人通过代码读取文件内容也不会阻止技术能力较强的人手动解除保护。它