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

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

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

使用 Quicker 生成每周的 “三表”
使用 Quicker 生成每周的 “三表”

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

💡 理清思路

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

使用压缩软件打开 Docx 格式的 Word 文档
使用压缩软件打开 Docx 格式的 Word 文档

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

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

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

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

🎬 视频教程

📋 准备工作

创建信息模板

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

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

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

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

键入数据表格内容
键入数据表格内容
生成列表表格内容
生成列表表格内容

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

制作 Word 模板

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

创建活动照片记录文档的基础模板
创建活动照片记录文档的基础模板

🔗 进行邮件合并

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

邮件合并分步向导操作过程
邮件合并分步向导操作过程

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

错误格式
错误格式

域代码

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

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

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

在  域中插入照片路径域
IncludePicture 域中插入照片路径域

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

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

插入  域
插入 Next Record

生成文档

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

邮件合并生成文档效果
邮件合并生成文档效果

✅ 进阶玩法

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

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

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

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

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 程序。

Excel 中创建进入文档并关闭 Excel 的宏
Excel 中创建进入文档并关闭 Excel 的宏

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

Sub 执行邮件合并()
    ' 执行邮件合并
    ActiveDocument.MailMerge.Execute
    
    ' 如果需要,可以在这里添加其他后续操作
End Sub

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

Word 中分配快捷键给宏
Word 中分配快捷键给宏

💭 尾言

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

展示评论