想不到只要這一段
Google Sheets 的 Apps Script 就能達到填完表單,
將報名表轉成 PDF 寄到使用者信箱。
真是太棒了!
將報名表轉成 PDF 寄到使用者信箱。
真是太棒了!
🎯範本下載:
💡 簡單的比喻
想像你是一個製作活動證書的工讀生:
1. 接單:有人遞給你一張報名表(
onFormSubmit)。2. 拿母片:你去櫃子拿出唯一的「證書母片」(
docTemplateId)。3. 影印:你拿到影印機印了一張新的,並在檔案夾上寫上對方的名字(
makeCopy)。4. 填寫:你用立可白和原子筆,把母片上寫著「{{姓名}}」的地方塗掉,改寫成對方的名字(
replaceText)。5. 護貝:為了怕弄髒或被改字,你把證書拿去護貝變成不可修改的樣子(轉成 PDF)。
6. 寄信:最後把護貝好的證書裝進信封,貼上郵票寄出去(
GmailApp.sendEmail)。這段程式碼就是把這個工讀生變成了光速機器人,一秒鐘就能完成這些事!
1. 在表單回覆 - 新增試算表 -
Apps Script 程式碼
// 這個函式會在表單提交時自動執行
function onFormSubmit(e) {
// TODO: 將這些變數設定為你自己的ID
var docTemplateId = 'Google文件範本的ID'; // Google文件範本的ID
var folderId = '資料夾ID'; // 儲存新生成PDF的資料夾ID
// 從事件物件e中取得最新提交的資料
var formData = e.namedValues;
// 取得收件人的電子郵件地址,假設表單中有一個名為 "電子郵件地址" 的欄位
// TODO: 將 "電子郵件" 替換成你表單中對應的欄位標題
var recipientEmail = formData['Email Address'][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);
}
2.設定 觸發條件 

3. appsscript.json (選用 )
👉👉這也是研習直播時翻車的主要原因,因為少了 https://www.googleapis.com/auth/documents

點選 左側 ⚙️ 專案設定 - ✅在編輯器中顯示「appsscript.json」資訊清單檔案
再回到 < > 編輯器中 將程式貼到 appsscript.json 中即可。
{
"timeZone": "Asia/Taipei",
"dependencies": {},
"exceptionLogging": "STACKDRIVER",
"runtimeVersion": "V8",
"oauthScopes": [
"https://www.googleapis.com/auth/script.external_request",
"https://www.googleapis.com/auth/spreadsheets",
"https://www.googleapis.com/auth/presentations",
"https://www.googleapis.com/auth/drive",
"https://www.googleapis.com/auth/gmail.send",
"https://www.googleapis.com/auth/script.scriptapp",
"https://www.googleapis.com/auth/forms",
"https://www.googleapis.com/auth/documents"
]
}
或是 appsscript.json 直接使用預設值也是沒問題的。
{
"timeZone": "Asia/Taipei",
"dependencies": {},
"exceptionLogging": "STACKDRIVER",
"runtimeVersion": "V8"
}
快來試試吧~




沒有留言:
張貼留言
歡迎大家一起留言討論!