Word不支持原生批量加水印,仅能通过VBA宏(处理已打开文档)或PowerShell+COM(文件夹级自动处理)实现;二者均直接操作页眉文本形状,避开不可靠的原生水印XML结构。

Word 本身不支持“批量给多个文档添加水印”的原生功能——没有一键拖入文件夹就全加上水印的按钮。所有所谓“批量”,都得靠外部手段补足,核心路径只有两条:VBA 宏自动化,或用 PowerShell + Word COM 对象调用。
用 VBA 宏一次处理当前打开的多个文档
如果你已经手动打开了十几个 .docx 文件,想统一加相同文字水印(比如“内部使用”),VBA 是最直接的选择。注意:宏不能跨实例操作——它只能遍历当前 Word 进程中已打开的文档,不会自动去文件夹里找文件。
- 按
Alt + F11打开 VBA 编辑器,插入新模块 - 粘贴以下代码(修改
"内部使用"和字体大小即可):
Sub AddWatermarkToAllOpenDocs()
Dim doc As Document
For Each doc In Application.Documents
With doc.Sections(1).Headers(wdHeaderFooterPrimary).Shapes.AddTextEffect( _
PresetTextEffect:=msoTextEffect1, Text:="内部使用", FontName:="Calibri", _
FontSize:=72, FontBold:=msoFalse, FontItalic:=msoFalse, Left:=0, Top:=0)
.Rotation = 315
.Fill.ForeColor.RGB = RGB(200, 200, 200)
.Line.Visible = msoFalse
.ZOrder msoSendToBack
End With
Next doc
End Sub
- 运行前确认所有目标文档都已打开且未受保护(否则
.Sections(1)会报错91) - 该方法绕过 Word 原生水印菜单,直接在页眉插入透明文本形状,兼容 Word 2010 及以上
用 PowerShell 脚本真正实现文件夹级批量处理
这才是严格意义上的“批量”:指定一个文件夹路径,脚本自动打开每个 .docx,加水印,保存并关闭。依赖 Windows 自带的 PowerShell 和 Word 桌面版(不能用网页版或 Word for Mac)。
- 保存为
add-watermark.ps1,右键以“PowerShell”运行(需先执行Set-ExecutionPolicy RemoteSigned -Scope CurrentUser) - 关键点:必须用
$word.Visible = $false静默运行,否则每打开一个文档都会弹窗,批量就卡死 - 水印位置、旋转、颜色等参数都在
Shapes.AddTextEffect()中硬编码,改Text和RGB即可
常见失败原因:Access is denied 错误通常因 Word 正在前台运行冲突;File is locked 多因某文档被其他程序占用;脚本无法处理加密文档或启用“限制编辑”的文件。
为什么不用 Word 原生“水印”功能批量加?
因为 Word 的 Design > Watermark > Custom Watermark 是单文档设置,背后写入的是 document.xml 中的 wps:wsp 结构,且依赖主题和节格式。你无法用查找替换或 XML 工具安全批量注入——改错一个标签(比如漏了 wp:anchorId),整个文档可能打不开。
- 原生水印本质是页眉里的
wp:watermark元素,但 Word 不公开其完整 Schema 规则 - 用 Open XML SDK 手动编辑 ZIP 内 XML 理论可行,但调试成本远高于 VBA/PowerShell
- 第三方工具(如 Kutools)所谓“批量水印”,底层仍是调用 COM 自动化,和自己写 PowerShell 无本质区别
真正卡住效率的不是“怎么加”,而是“怎么确保每个文档的节设置一致”——如果某个文档有首页不同、奇偶页不同,水印可能只出现在第一节。批量前务必检查 Layout > Page Setup > Layout > Section Start 是否统一为“新建页”。










