用好 Word 邮件合并,自动生成照片记录文档|一日一技

这个学期开始接触行政事务,现今的教学、德育、安全等工作都强调“事过留痕”的原则,各类活动都要求「精心策划、详细记录」—— 包括撰写方案、拍照、撰写方案、简报以及打印活动照片,每个星期少也有 3~4 份活动照片记录,排版工作确实相当繁琐。
图片
使用 Quicker 生成每周的「三表」
在去年尝试使用 Quicker 自动生成每周的缺勤登记、体温异常及健康情况统计表后,我便想,寻找能够半自动或自动生成活动照片记录的方法,提高此类事务的处理效率。
理清思路
活动照片记录文档主要由标题、照片及照片说明组成,可以在此基础上构建一个模板,进行重复套用。
图片
使用压缩软件打开 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.jpg、2.jpg、3.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 的宏
接着,打开「邮件合并模板.docm」,按 Alt + F11 进入 VBA 编辑器,点击「插入-模块」,在编辑框中插入以下代码,编辑完成后按 Ctrl + S 保存,关闭 VBA 编辑器。
Sub 执行邮件合并()
' 执行邮件合并
ActiveDocument.MailMerge.Execute
' 如果需要,可以在这里添加其他后续操作
End Sub
Word 无法像 Excel 一样指定宏到一个按钮上,但可以通过快捷键运行宏。在 邮件 选项卡中右击鼠标,选择「自定义功能区」。进入到 Word 选项,点击「键盘快捷方式:自定义」,「将更改保存在文档」选择「邮件合并模板.docm」,然后在「类别」中找到「宏」,选择「执行邮件合并」,添加一个快捷键组合,我这里分配的是 Alt + Shift + N,分配好后点击「指定」。
图片
Word 中分配快捷键给宏
尾言
除了以上方式,你也可以利用其它的工具来实现,比如 Power Automate、python-docx 库、Quicker 等方式,巧妙运用一些自动化工具,可以帮助你高效完成重复性的工作任务,早日实现应摸尽摸。
https://sspai.com/post/83276?utm_source=wechat&utm_medium=social
作者:XavierWang
责编:张奕源Nick