iT邦幫忙

2025 iThome 鐵人賽

DAY 26
0

今天我們來用表單連接GAS去自動產生pdf文件
一樣先開一個google 表單,再用表單連結的試算表開GAS。

程式碼解析

function onFormSubmit(e) {
  var sheet = e.range.getSheet();
  var row = e.range.getRow();
  var rowData = sheet.getRange(row, 1, 1, sheet.getLastColumn()).getValues()[0];

e:這個參數是 Google Apps Script 在觸發時自動傳入的「事件物件」,包含了表單提交的相關資訊。

e.range.getSheet() 和 e.range.getRow():從事件物件中取得觸發表單回應的試算表物件和新資料所在的列號。

sheet.getRange(...).getValues()[0]:讀取該列的所有資料,並將其存入 rowData 這個陣列中。

  // 設定欄位對應 (假設表單欄位順序是:時間戳記, 姓名, 部門, 日期, 用途, Email)
  var name = rowData[1];
  var department = rowData[3];
  var date = rowData[4];
  var purpose = rowData[6];
  var email = rowData[2];
  var money= rowData[5];

這段程式碼根據表單欄位的固定索引位置來提取資料。例如,rowData[1] 假設對應的是表單的第二個欄位「姓名」,rowData[3] 則對應第四個欄位「部門」。

  // 模板文件 ID
  var templateId = "1fvKQ2xdBoMEFAte98LwtTizwoi14vu24nb2duVfs-MI";
  var folderId = "1bz1sEXfdobTEd29GsP1u-9Z-B0-ZGtEJ";

  // 複製模板
  var templateFile = DriveApp.getFileById(templateId);
  var newFile = templateFile.makeCopy(name + "_申請單", DriveApp.getFolderById(folderId));

templateId 和 folderId:這兩個變數必須事先設定,分別代表你的 Google Docs 範本文件 ID 和存放新文件的資料夾 ID。

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

.makeCopy(...):複製範本文件。新複製的文件會以「員工姓名_申請單」命名,並存放在指定的資料夾中。

  var doc = DocumentApp.openById(newFile.getId());
  var body = doc.getBody();

  // 替換模板文字
  body.replaceText("<<NAME>>", name);
  body.replaceText("<<DEPARTMENT>>", department);
  body.replaceText("<<DATE>>", date);
  body.replaceText("<<PURPOSE>>", purpose);
  body.replaceText("<<EMAIL>>",email);
  body.replaceText("<<MONEY>>",money);
  doc.saveAndClose();

  // 轉成 PDF
  var pdf = newFile.getAs("application/pdf");

  // 寄送 Email (可選)
  GmailApp.sendEmail(email, "你的申請單", "請查收附件 PDF", {
    attachments: [pdf]
  });
}

DocumentApp.openById(...):以 Google Docs 服務開啟剛剛複製出來的新文件。

body.replaceText(...):這是關鍵步驟。程式碼會自動找到文件內所有 <<...>> 格式的占位符,並用表單中提取的實際資料來替換它們。

doc.saveAndClose():完成替換後,儲存並關閉文件。
newFile.getAs("application/pdf"):將剛才編輯好的 Google Docs 文件轉換為 PDF 格式的位元組串流(Blob)。

GmailApp.sendEmail(...):這行程式碼利用 Gmail 服務,向表單提交者的 email 地址寄送一封電子郵件。

attachments: [pdf]:將剛才轉換好的 PDF 檔案,以附件的形式夾帶在信件中。

觸發器

我們必須設定一個觸發器讓其可以在提交表單時自動產生文件。
觸發器設定如下:https://ithelp.ithome.com.tw/upload/images/20250909/20169466l2CPqcFQJt.png

成果

https://ithelp.ithome.com.tw/upload/images/20250909/20169466AbufE27Gzn.png
https://ithelp.ithome.com.tw/upload/images/20250909/20169466ZjTzMWjLCc.pnghttps://ithelp.ithome.com.tw/upload/images/20250909/20169466qD01856EuS.jpg
https://ithelp.ithome.com.tw/upload/images/20250909/20169466NommrpNYDE.png


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

尚未有邦友留言

立即登入留言