You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 19:45:03