如何通过AppsScript为多个表单批量添加onSubmit触发器发送响应回执
方案1:使用表单内置功能实现(无需触发器,最简方案)
Google表单本身自带自动发送响应副本给受访者的原生能力,不需要额外维护触发器,直接在创建表单时添加2行配置即可实现你要的效果,修改后代码如下:
function createForm(fileName, title, description) { var form = FormApp.create(fileName) .setTitle(title) .setDescription(description); // 必选:开启收集受访者邮箱,否则无法发送副本 form.setCollectEmail(true); // 开启自动发送响应副本给填表人,完全匹配你需要的sendACopyOfTheResponse效果 form.setSendCopyToRespondent(true); } function createForms() { // ... 你的其他逻辑 for (var j = 0; j < 15; j++) { createForm(fileName, title, description); } // ... 你的其他逻辑 }
该方案优势是无需处理触发器的维护、权限、数量限制问题,稳定性更高。
方案2:使用onSubmit触发器实现(适合需要自定义邮件内容的场景)
如果你需要自定义邮件模板、附加额外通知信息,可以使用触发器方案,完整实现代码如下:
第一步:编写表单创建+触发器绑定逻辑
// 批量创建表单并绑定提交触发器 function createForms() { // ... 你的其他逻辑 for (var j = 0; j < 15; j++) { const form = createForm(fileName, title, description); // 给每个新表单绑定专属提交触发器 bindFormSubmitTrigger(form.getId()); } // ... 你的其他逻辑 } function createForm(fileName, title, description) { var form = FormApp.create(fileName) .setTitle(title) .setDescription(description); // 开启收集受访者邮箱 form.setCollectEmail(true); return form; } // 绑定触发器前先做去重校验,避免重复创建 function bindFormSubmitTrigger(formId) { const existingTriggers = ScriptApp.getProjectTriggers(); for (let trigger of existingTriggers) { if (trigger.getTriggerSourceId() === formId && trigger.getHandlerFunction() === 'onFormSubmitHandler') { return; } } // 创建新的表单提交触发器 ScriptApp.newTrigger('onFormSubmitHandler') .forForm(formId) .onFormSubmit() .create(); }
第二步:编写提交事件处理函数
// 表单提交时自动触发,发送自定义响应副本 function onFormSubmitHandler(e) { const response = e.response; const respondentEmail = response.getRespondentEmail(); const formTitle = FormApp.getActiveForm().getTitle(); // 拼接响应内容,可根据需求自定义格式 let content = `你提交的《${formTitle}》响应内容如下:\n\n`; const itemResponses = response.getItemResponses(); for (let itemRes of itemResponses) { const question = itemRes.getItem().getTitle(); const answer = itemRes.getResponse(); content += `${question}:${Array.isArray(answer) ? answer.join('、') : answer}\n`; } // 发送邮件 GmailApp.sendEmail( respondentEmail, `《${formTitle}》提交成功,响应副本`, content ); }
注意事项
- 普通Google账号单脚本触发器上限为20个,你的10-15个表单需求完全符合限制要求
- 首次执行创建触发器的代码时,需要按照弹窗提示完成权限授权
- 可使用下面的辅助函数清理测试产生的冗余触发器:
// 辅助函数:删除当前脚本所有触发器 function deleteAllTriggers() { const triggers = ScriptApp.getProjectTriggers(); for (let t of triggers) { ScriptApp.deleteTrigger(t); } }
内容的提问来源于stack exchange,提问作者alperenn
相关产品推荐
相关产品推荐

