如何使用 Python 加密和保护 Word 文档

在日常办公中,Word 文档经常包含合同条款、财务报表、内部规范等敏感内容。将这些文件直接发给他人时,往往需要限制对方的访问权限------要么要求输入密码才能打开,要么只允许阅读、禁止修改。手动在 Word 中逐个设置这些选项很繁琐,而在批量分发文档时更不现实。用 Python 可以统一处理这类需求:一次脚本运行,就能为一批文档加上密码、设置编辑限制,甚至指定某些段落仍可填写。

本文以 Spire.Doc for Python 为例,介绍如何对 Word 文档执行加密、保护、解除保护以及设置可编辑区域等常见操作。

环境准备

安装 Spire.Doc 库:

bash 复制代码
pip install Spire.Doc

然后在脚本中引入必要的模块:

python 复制代码
from spire.doc import *
from spire.doc.common import *

用密码加密文档

最直接的保护方式是给文档设置打开密码。只有输入正确密码的用户才能查看内容。加密只需调用 Encrypt() 方法:

python 复制代码
# 创建 Document 对象并加载文档
document = Document()
document.LoadFromFile("合同模板.docx")

# 设置打开密码
document.Encrypt("E-iceblue")

# 保存加密后的文档
document.SaveToFile("加密后的合同.docx", FileFormat.Docx)
document.Close()

加密后,双击打开该文件会弹出密码输入框。Encrypt() 传入的字符串即为打开密码,保存时文档会以加密形式写入磁盘。

设置保护类型,限制编辑

如果希望文档可以打开,但不能被随意修改,可以使用 Protect() 方法。它接受两个参数:保护类型和密码。密码用于解除保护,保护类型则由 ProtectionType 枚举指定。

python 复制代码
document = Document()
document.LoadFromFile("会议纪要.docx")

# 仅允许阅读,修改需提供密码
document.Protect(ProtectionType.AllowOnlyReading, "123456")

document.SaveToFile("只读会议纪要.docx", FileFormat.Docx2013)
document.Close()

ProtectionType 提供多种粒度:

  • AllowOnlyReading:只允许阅读,其余编辑操作都被禁止;
  • AllowOnlyFormFields:只能填写表单域,适合需要收集填写的场景;
  • NoProtection:解除保护。

选择哪种类型取决于文档的使用方式。例如,需要收集信息的通知文件可以配合 AllowOnlyFormFields 使用。

在受保护的文档中留出可编辑区域

有些场景下,文档整体只读,但希望指定段落仍可编辑,比如合同中的签字栏、问卷中的答题区。实现方式是在保护文档后,用 PermissionStartPermissionEnd 标签把允许编辑的段落圈出来:

python 复制代码
document = Document()
document.LoadFromFile("调研问卷.docx")

# 先保护整个文档
document.Protect(ProtectionType.AllowOnlyReading, "password")

# 为可编辑区域创建一对起止标签
start = PermissionStart(document, "editID")
end = PermissionEnd(document, "editID")

# 将标签插入到第一个段落的开头和结尾
first_paragraph = document.Sections[0].Paragraphs[0]
first_paragraph.ChildObjects.Insert(0, start)
first_paragraph.ChildObjects.Add(end)

document.SaveToFile("问卷-可编辑版.docx", FileFormat.Docx)
document.Close()

PermissionStartPermissionEnd 使用相同的 ID 标识同一个区域,两者之间的内容即为允许编辑的范围。这样,读者在只读文档中仍可修改被标记的段落。

锁定指定节

对于由多个节(Section)组成的文档,可以只保护部分节。思路是:先对整个文档启用保护,再将不需要保护的节设为 ProtectForm = False

python 复制代码
document = Document()

# 添加两个节并写入文本
s1 = document.AddSection()
s2 = document.AddSection()
s1.AddParagraph().AppendText("第一节:受保护的内容")
s2.AddParagraph().AppendText("第二节:可编辑的内容")

# 使用表单域保护类型保护整个文档
document.Protect(ProtectionType.AllowOnlyFormFields, "123")

# 解除第二节的保护
s2.ProtectForm = False

document.SaveToFile("分节保护.docx", FileFormat.Docx2013)
document.Close()

这种做法的典型应用是:文档前半部分是固定的说明文字,后半部分是留给用户填写的表格或内容。

打开加密文档并解除保护

当需要修改受保护的文档时,先带密码加载,再解除保护:

python 复制代码
document = Document()

# 用密码加载加密文档
document.LoadFromFile("加密后的合同.docx", FileFormat.Docx, "E-iceblue")

# 解除所有保护
document.Protect(ProtectionType.NoProtection)

document.SaveToFile("解密后的合同.docx", FileFormat.Docx)
document.Close()

LoadFromFile() 的第三个参数即文档的打开密码。之后调用 Protect(ProtectionType.NoProtection) 即可移除编辑限制。

实用提示

  • 密码只保存在生成的文件中,脚本本身不会记录密码;如果密码丢失,加密的文档将无法正常打开,建议在脚本外部统一管理密码。
  • Protect()Encrypt() 可以叠加使用:先设置打开密码,再启用编辑保护,形成双重防线。
  • 批量处理时,把密码和文件路径放在一个循环或列表中,即可一次加密整批文档。

总结

本文演示了用 Python 对 Word 文档进行加密、编辑保护、可编辑区域设置、分节保护以及解除保护的完整流程。核心 API 包括 Encrypt()Protect()PermissionStart / PermissionEndProtectForm 属性。在实际项目中,可以将这些操作封装成函数,结合循环对成批文档应用统一的安全策略,从而替代大量重复的手工操作。

相关推荐
shirsl17 分钟前
算法 Day1-数组 / 哈希 + 双指针
python·算法·哈希算法
广州山泉婚姻6 小时前
Python序列号源码分析
python
计算机源码社7 小时前
【大数据项目实战】基于大数据的影视内容生态综合质量分析与可视化-基于数据挖掘的影视内容类型共现与口碑聚类分析系统
大数据·人工智能·python·数据挖掘·数据分析·毕业设计·课程设计
两点王爷7 小时前
SpringBoot 项目集成 GeoServer 源码,实现地图服务发布
java·spring boot·后端
C^h7 小时前
pytorch 适合初学者 0基础学习
人工智能·pytorch·python
小柯南敲键盘7 小时前
跨马翻译:AI批量图片翻译工具,跨境电商视频字幕翻译与智能抠图一体搞定
人工智能·python·音视频
2601_962297257 小时前
Python里behave和pytest-bdd哪个更适合中大型项目?为什么?
python·bdd·行为驱动开发·behave·pytest-bdd
leoZ2318 小时前
2026-09-09-springboot-cloud-deploy-pitfalls
java·前端·javascript·vue.js·人工智能·spring boot·后端
海上彼尚9 小时前
Cursor 模型的强度实测排行
前端·人工智能·后端
YCOSA20259 小时前
系统工具使用检测.exe (仅供娱乐)
python·microsoft