這個是在Line社團裡面的討論
有人發問想在word合併列印之後直接將檔案輸出成PDF
由於這是超過word本身的流程,因此只能透過VBA來達成
他自己曾經嘗試處理,也詢問過GPT得到VBA程式碼
但是無法輸出想要的結果
我後來測試他提供的檔案與程式碼
一開始我是測試程式碼,結果程式碼是可以運作的
所以我才進一步去看整體檔案(vba程式碼、套印資料來源excel、套印格式word檔)
發現程式尋找的字串跟word內的字串不一致
修改之後,程式碼便能順利運作,套印輸出相對應的內容
回過頭來說程式碼的執行邏輯
這個VBA程式是透過在套印格式word檔中尋找特定字串、用資料表的資料取代特定字串以及搭配迴圈來產生套印的效果
跟在google apps script套印文件的邏輯是一樣的
我之前也曾經測試過「Gg / 使用google documen製作模板套印google spreadsheets資料並轉成PDF」
以下提供本次的測試碼
Excel VBA的程式碼
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
Sub ExportToWordAndPDF() Dim ws As Worksheet '早期繫結 需要引用 Microsoft Word Object Library Dim wordApp As Word.Application Dim wordDoc As Word.Document Dim wordTemplatePath As String Dim lastRow As Long Dim i As Long Dim rngA As Range, rngB As Range, rngC As Range Dim fileName As String Dim savePath As String ' 設定工作表 Set ws = ThisWorkbook.Sheets("工作表1") ' 替換為你的工作表名稱 ' 獲取資料的最後一行 lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row ' 設定Word範本路徑 wordTemplatePath = ThisWorkbook.Path & Application.PathSeparator & "temp.docx" ' 替換為你的Word範本路徑 ' 創建Word應用程式對象 On Error Resume Next Set wordApp = New Word.Application On Error GoTo 0 ' 顯示Word應用程式(可選) wordApp.Visible = True ' 循環遍歷Excel中的每一行資料 For i = 2 To lastRow ' 假設從第2行開始有資料,跳過標題行 ' 選擇要插入的列 Set rngA = ws.Cells(i, 1) Set rngB = ws.Cells(i, 2) Set rngC = ws.Cells(i, 3) ' 打開Word範本 Set wordDoc = wordApp.Documents.Add(wordTemplatePath) ' 插入Excel資料到Word文件的指定位置 With wordDoc .Content.Find.Execute FindText:="<<姓名>>", ReplaceWith:=rngA.Value, Replace:=wdReplaceAll .Content.Find.Execute FindText:="<<名次>>", ReplaceWith:=rngB.Value, Replace:=wdReplaceAll .Content.Find.Execute FindText:="<<獎金>>", ReplaceWith:=rngC.Value, Replace:=wdReplaceAll End With ' 設定保存路徑和文件名 savePath = ThisWorkbook.Path & Application.PathSeparator fileName = rngA.Value ' 使用A列資料作為文件名 ' 保存Word文件 PDF格式 wordDoc.SaveAs2 fileName:=savePath & fileName & ".pdf", FileFormat:=wdFormatPDF ' 關閉文件 wordDoc.Close False Next i ' 關閉Word應用程式 wordApp.Quit ' 清理對象 Set wordDoc = Nothing Set wordApp = Nothing Set rngA = Nothing Set rngB = Nothing Set rngC = Nothing End Sub |
Excel 套印資料來源
Word套印格式範本
關隘所在
提問者的問題就是出在word套印格式的字串 與 程式碼的 FindText 沒有對應一致
所以在word會找不到相符的字串,自然也就無法取代