這個學期開始接觸行政事務,現今的教學、德育、安全等工作都強調「事過留痕」的原則,各類活動都要求「精心策劃、詳細記錄」—— 包括撰寫方案、拍照、撰寫方案、簡報以及打印活動照片,每個星期少也有 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 等方式,巧妙運用一些自動化工具,可以幫助你高效完成重複性的工作任務,早日實現應摸🐟盡摸🐟。