iT邦幫忙

2025 iThome 鐵人賽

DAY 25
0

前面我們已經做好前置作業了,那麼今天我們來做程式碼的部分

程式碼解析

function generatePDF() {
  var templateId = "1fvKQ2xdBoMEFAte98LwtTizwoi14vu24nb2duVfs-MI"; // 範本文件 ID
  var folderId = "1bz1sEXfdobTEd29GsP1u-9Z-B0-ZGtEJ"; // 存放 PDF 的資料夾 ID

templateId 和 folderId 是這段程式碼的關鍵參數。你需要先手動在 Google Drive 找到你的範本文件和目標資料夾,並將它們各自的 ID 填入,程式碼才能知道要操作哪一份文件和哪個資料夾。

  // 1. 複製範本文件
  var copy = DriveApp.getFileById(templateId)
                     .makeCopy("自動產生文件_" + new Date().getTime(),
                               DriveApp.getFolderById(folderId));

DriveApp.getFileById(templateId):透過範本文件的 ID 取得該文件物件。

.makeCopy(...):執行複製操作。

第一個參數 ("自動產生文件_" + new Date().getTime()) 是新複製文件的檔名。它會加上當前時間戳記,確保每次產生都不會重複。

第二個參數 (DriveApp.getFolderById(folderId)) 指定了複製出來的文件要存放在哪一個資料夾。

  // 2. 等待 2 秒,避免複製還沒完成
  Utilities.sleep(2000);
  
  // 3. 開啟複製檔,替換占位符
  var doc = DocumentApp.openById(copy.getId());
  var body = doc.getBody();
  body.replaceText("<<COMPANY>>", "naco股份有限公司");
  body.replaceText("<<NAME>>", "小明");
  body.replaceText("<<AMOUNT>>", "NT$10,000");
  body.replaceText("<<DATE>>", new Date().toLocaleDateString("zh-TW"));
  doc.saveAndClose();

Utilities.sleep(2000):這是一個重要的步驟。在 Google Drive 服務中,複製檔案需要一些時間。為了避免程式碼太快執行導致找不到剛複製好的檔案,這裡會暫停 2 秒,確保複製操作已經完成。

DocumentApp.openById(copy.getId()):透過剛複製出來的文件的 ID,以 Google Docs 服務開啟它。

body.replaceText(...):這就是程式碼的核心替換邏輯。它會找到文件中所有 <<...>> 格式的占位符(placeholder),並用後面的實際文字替換掉,例如將 <> 替換為「naco股份有限公司」。

doc.saveAndClose():完成所有替換後,儲存並關閉文件。

  // 4. 轉換成 PDF
  var pdfBlob = DriveApp.getFileById(copy.getId()).getAs("application/pdf");
  var folder = DriveApp.getFolderById(folderId);
  var pdfFile = folder.createFile(pdfBlob)
                      .setName("申請文件_" + new Date().toISOString().slice(0,10) + ".pdf");

getAs("application/pdf"):這是將 Google Docs 文件轉換成 PDF 檔案的關鍵方法。它會將文件內容以「位元組串流(Blob)」的形式轉換成 PDF 格式。

folder.createFile(pdfBlob):在指定的資料夾中,用剛才產生的 PDF 位元組串流建立一個新的檔案。

.setName(...):設定最終 PDF 檔案的名稱。這裡的檔名格式是「申請文件_YYYY-MM-DD.pdf」,例如「申請文件_2025-09-08.pdf」。

  Logger.log("✅ PDF 已建立:" + pdfFile.getUrl());
}

Logger.log():在 Google Apps Script 的執行記錄中印出訊息,方便開發者追蹤程式碼是否執行成功,以及產生的 PDF 檔案網址。

成果

https://ithelp.ithome.com.tw/upload/images/20250908/20169466vyswQQSb9E.png
https://ithelp.ithome.com.tw/upload/images/20250908/20169466Nwqpta3mxA.png
https://ithelp.ithome.com.tw/upload/images/20250908/20169466BPVSyaeGcW.png


上一篇
D24 自動產生文件 & PDF
系列文
Google App Script雲端自動化與動態網頁實戰25
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言