巧用 Word 邮件合并，半自动生成活动照片记录文档

这个学期开始接触行政事务，现今的教学、德育、安全等工作都强调 “事过留痕” 的原则，各类活动都要求「精心策划、详细记录」—— 包括撰写方案、拍照、撰写方案、简报以及打印活动照片，每个星期少也有 3~4 份活动照片记录，排版工作确实相当繁琐。

在去年尝试使用 Quicker 自动生成每周的缺勤登记、体温异常及健康情况统计表后，我便想，寻找能够半自动或自动生成活动照片记录的方法，提高此类事务的处理效率。

💡 理清思路

活动照片记录文档主要由标题、照片及照片说明组成，可以在此基础上构建一个模板，进行重复套用。

原先我的设想是，Docx 文件本质上是一个压缩包，通过直接替换压缩包中的图片，外加手动修改标题，便完成了活动照片记录。

不过这个想法很快就被上头 “一拍大腿” 的格式标准给打破了 —— 每张照片下，都必须用文字说明时间、地点、主题、主办单位。

少数派作者群的群友给出了不少的建议，比如利用 python-docx 库，以及邮件合并的方法。而 Power Automate 涉及到 Excel 与 Word 的自动化流需要订阅高级版方可使用。因为不会 Python 和 VBA，我最终选择了大学计算机基础学过的 Word 邮件合并，Word 的事还是交给 Word 来解决（

注：下文步骤将创建两个文件 —— 信息模板.xlsx、邮件合并模板.docx，并使用 F:\工作文件\照片收集\ 作为活动照片存放的文件夹，请根据实际情况进行更改。

🎬 视频教程

🎬 视频观看链接：Bilibili / YouTube

📋 准备工作

创建信息模板

Word 邮件合并可以将数据源的信息，套用在一个相同格式的模板，适合生成大量个性化文档的场景。

第一步，我先在 Excel 中制作了活动照片记录需要的信息字段模板，比如活动主题、活动日期及活动照片存放文件夹，通过这些基础信息，利用公式生成其余的固定信息。

Excel 工作簿分为两个工作表 —— 键入数据、生成列表，前者用于输入相关信息，后者生成后提供给 Word 引用。需要注意，因为 Word 中的 IncludePicture 域会处理反斜杠 \，因此文件夹和照片文件的单反斜杠 \ 需要替换为双反斜杠 \\。

照片文件夹、照片路径 两列的数据可以通过公式自动处理，如 ="F:\\工作文件\\照片收集\\"&B2 生成文件夹路径、=E2&"\\1.jpg" 生成照片文件路径（照片按照 1.jpg、2.jpg、3.jpg …… 格式进行重命名）。

完成编辑后，保存 信息模板.xlsx 表格。

制作 Word 模板

第二步，按照文件格式要求，制作活动照片记录的模板。这一步可以直接套用先前制作的文档。

🔗 进行邮件合并

第三步，进行邮件合并。在 Word 中切换至邮件选项卡，进入邮件合并分步向导，数据来源使用刚才创建的信息字段模板。接下来，我们需要在文档中需要填写信息的地方，插入合并域。

当你在这一步点击生成时，恭喜你得到了一份没有照片且不符要求的活动记录，实现自动插入照片以及满足一页两张照片的要求，还需要使用多一点点域代码。

域代码

Word 域代码可以看成是动态更新的内容，用于在文档中插入自动化的内容、功能或数据，例如页码、日期和时间、邮件合并、文档属性、交叉引用、图序等。在这里我们需要用到 IncludePicture 域、Next 字段。

IncludePicture 域可以在文中插入指定路径的图片。在插入选项卡中，找到文档部件 - 域 - IncludePicture，文件名填写 “路径” 二字，点击确定插入到文档的指定位置。

因为还没有填写图片的文件路径，图片此时是无法加载的。按下 Alt + F9 快捷键，显示当前文档的域代码，将 IncludePicture 域中的 “路径” 二字替换为照片路径域。

默认情况下，Word 会按页为单位生成新的文档，实现同一文档插入多条数据记录，我们需要使用到 Next Record 域。

使用方法很简单，在邮件选项卡中，找到规则 - 下一记录，插入至图片说明的末尾。接着将图片以及图片说明复制、粘贴、复制、粘贴。

生成文档

完成以上步骤后，你就得到了一份活动照片记录的模板。在 邮件 选项卡中，点击 完成并合并 - 编辑单个文档，生成后，选择全部内容 Ctrl + A，更新域内容 F9，此时生成的文档图片便会自动更新为文件夹的照片。

✅ 进阶玩法

注：以下的 VBA 宏代码均由 ChatGPT 生成，本人负责组合、拼接与搬运。

除了手动完成邮件合并，利用 VBA 宏与快捷键，也能减少生成文档需要的步骤。

首先，分别将 信息模板.xlsx 与 邮件合并模板.docx 分别另存为 信息模板.xlsm（启用宏的表格）、邮件合并模板.docm（启用宏的文档），Word 与 Excel 需要开启宏，并将文档所在目录设为 受信任目录 （Word 选项 - 信任中心 - 信任中心设置 - 受信任位置）。

随后打开 信息模板.xlsm，按 Alt + F11 进入 VBA 编辑器，点击 插入 - 模块，在编辑框中插入以下代码，编辑完成后按 Ctrl + S 保存，关闭 VBA 编辑器。

Copy
Sub 进入邮件合并()
Dim objWord As Object

' 创建一个 Word 应用程序对象
Set objWord = CreateObject("Word.Application")

' 打开 Word 文档（替换为你的 Word 文档的路径）
objWord.Documents.Open "F:\工作文件\邮件合并模板.docm"

' 让 Word 应用程序可见
objWord.Visible = True

' 保存当前工作簿
ThisWorkbook.Save

' 退出 Excel
Application.Quit
End Sub

Excel 切换到 开发工具 选项卡，点击 插入 - 按钮（窗体控件），在工作表上画出一个按钮，绘制好后右击按钮，点击 指定宏，选择刚才创建的 进入邮件合并。点击按钮后，便会自动打开邮件合并模板，并且关闭 Excel 程序。

接着，打开 邮件合并模板.docm，按 Alt + F11 进入 VBA 编辑器，点击 插入 - 模块，在编辑框中插入以下代码，编辑完成后按 Ctrl + S 保存，关闭 VBA 编辑器。

Copy
Sub 执行邮件合并()
' 执行邮件合并
ActiveDocument.MailMerge.Execute

' 如果需要，可以在这里添加其他后续操作
End Sub

Word 无法像 Excel 一样指定宏到一个按钮上，但可以通过快捷键运行宏。在 邮件 选项卡中右击鼠标，选择 自定义功能区。进入到 Word 选项，点击 键盘快捷方式：自定义，将更改保存在文档 选择 邮件合并模板.docm，然后在 类别 中找到 宏，选择 执行邮件合并，添加一个快捷键组合，我这里分配的是 Alt + Shift + N，分配好后点击 指定。

💭 尾言

除了以上方式，你也可以利用其它的工具来实现，比如 Power Automate、python-docx 库、Quicker 等方式，巧妙运用一些自动化工具，可以帮助你高效完成重复性的工作任务，早日实现应摸🐟尽摸🐟。