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