2025年9月17日 星期三

「Google Sheets Apps Script」填完表單,寄送 PDF 報名表

想不到只要這一段 Google Sheets 的 Apps Script 就能達到填完表單,
將報名表轉成 PDF 寄到使用者信箱。
真是太棒了!

1.設定 觸發條件 



2. Apps Script 程式碼

// 這個函式會在表單提交時自動執行
function onFormSubmit(e) {

  // TODO: 將這些變數設定為你自己的ID
  var docTemplateId = 'Google文件範本的ID'; // Google文件範本的ID
  var folderId = '儲存新生成PDF的資料夾ID'; // 儲存新生成PDF的資料夾ID

  // 從事件物件e中取得最新提交的資料
  var formData = e.namedValues;

  // 取得收件人的電子郵件地址,假設表單中有一個名為 "電子郵件地址" 的欄位
  // TODO: 將 "電子郵件" 替換成你表單中對應的欄位標題
  var recipientEmail = formData['電子郵件地址'][0];

  // 檢查是否有收件人的電子郵件,如果沒有則終止腳本
  if (!recipientEmail) {
    Logger.log('沒有找到收件人電子郵件地址,腳本終止。');
    return;
  }

  // 取得範本文件
  var templateFile = DriveApp.getFileById(docTemplateId);
 
  // 取得目標資料夾
  var destinationFolder = DriveApp.getFolderById(folderId);

  // 複製範本文件到新檔案
  // var newDocName = '填寫者名稱 - 你的文件標題 ' + new Date().toLocaleDateString(); // TODO: 修改文件名
  var schoolName = formData['校名'][0];
  var chineseName = formData['中文姓名'][0];
  var newDocName = schoolName + ' - ' + chineseName + ' - ' + '報名表 ' + new Date().toLocaleDateString();
  var newDocFile = templateFile.makeCopy(newDocName, destinationFolder);

  // 打開新複製的文件
  var newDoc = DocumentApp.openById(newDocFile.getId());
  var body = newDoc.getBody();

  // 替換文件中的標記
  // 遍歷表單中的每個欄位
  for (var key in formData) {
    if (formData.hasOwnProperty(key)) {
      // 獲取表單欄位的值
      var value = formData[key][0];
      // 替換文件中的 {{欄位名稱}} 標記
      body.replaceText('{{' + key + '}}', value);
    }
  }

  // 儲存並關閉文件,以確保所有更改都已應用
  newDoc.saveAndClose();

  // 將新文件轉換為PDF並儲存到目標資料夾
  var pdfFile = newDocFile.getAs('application/pdf');

  // 將PDF文件寄送給收件人
  var subject = '您的報名文件已完成 - ' + newDocName; // TODO: 修改郵件主旨
  var emailBody = '您好,您的報名文件已備妥,請查收附件。'; // TODO: 修改郵件內文

  GmailApp.sendEmail(recipientEmail, subject, emailBody, {
    attachments: [pdfFile.setName(newDocName + '.pdf')]
  });

  Logger.log('已成功寄送文件給 ' + recipientEmail);
}

快來試試吧~





沒有留言:

張貼留言

歡迎大家一起留言討論!