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

如何在运行时删除Google Form响应?含跨表单提交限制需求

如何阻止未提交Form2就提交Form1的违规响应并自动删除

我来帮你搞定这个需求,核心思路是借助Google Apps Script在Form1收到提交时,自动验证用户是否已经提交过Form2,要是没提交就直接删除这条违规的Form1响应,甚至还能给用户发个提醒。具体步骤如下:

1. 前期准备:统一用户标识字段

首先得确保两个表单能识别同一个用户,最简单的办法是:

  • 在Form2和Form1中都添加一个必填的「电子邮箱」字段,标题要完全一致(比如都叫「电子邮箱」),这样我们就能通过邮箱来关联用户的提交记录。

2. 编写Form1的验证脚本

打开Form1,点击右上角的「扩展程序」→「Apps脚本」,进入脚本编辑器,替换成下面的代码:

// 替换成你的Form2 ID(从Form2的URL里取,比如https://docs.google.com/forms/d/XXXXXX/edit里的XXXXXX)
const FORM2_ID = "你的Form2唯一ID";

// 表单提交触发的函数
function onFormSubmit(e) {
  // 提取当前Form1提交的用户邮箱
  const userEmail = e.response.getItemResponses().find(item => 
    item.getItem().getTitle() === "电子邮箱"
  ).getResponse();

  // 容错:如果邮箱为空(理论上必填字段不会出现),直接终止
  if (!userEmail) return;

  // 检查该用户是否提交过Form2
  const form2 = FormApp.openById(FORM2_ID);
  const form2Responses = form2.getResponses();
  const hasSubmittedForm2 = form2Responses.some(response => {
    const form2UserEmail = response.getItemResponses().find(item => 
      item.getItem().getTitle() === "电子邮箱"
    ).getResponse();
    return form2UserEmail === userEmail;
  });

  // 如果未提交Form2,直接删除当前Form1响应
  if (!hasSubmittedForm2) {
    // 先阻止响应写入关联表格
    e.response.setDestination(FormApp.DestinationType.NONE);
    // 删除这条违规响应
    e.response.deleteResponse();
    // 可选:给用户发提醒邮件
    MailApp.sendEmail(
      userEmail,
      "提交失败提醒",
      "你需要先完成Form2的提交,才能提交Form1哦,请先去提交Form2~"
    );
  }
}

3. 设置脚本触发条件

脚本写好后,得让它在Form1收到提交时自动运行:

  • 在脚本编辑器左侧点击「触发器」图标(闹钟形状)
  • 点击「添加触发器」,设置以下参数:
    • 选择要运行的函数:onFormSubmit
    • 部署类型:Head
    • 事件源:来自表单
    • 事件类型:表单提交
  • 点击保存,按照提示授权脚本权限(放心,这只会访问你自己的表单和数据)

4. 优化建议(针对大量提交场景)

如果Form2的响应量很大,直接调用getResponses()查询会有点慢,你可以把Form2的响应同步到Google表格,然后从表格里查询邮箱,效率更高:

// 替换成Form2关联的表格ID
const FORM2_SPREADSHEET_ID = "你的Form2表格ID";

// 从表格中查询用户是否提交过Form2
function checkForm2Submission(userEmail) {
  const sheet = SpreadsheetApp.openById(FORM2_SPREADSHEET_ID).getSheetByName("表单响应 1");
  // 假设邮箱在表格的第2列(可根据实际调整列数)
  const emailColumn = sheet.getRange(2, 2, sheet.getLastRow()-1).getValues().flat();
  return emailColumn.includes(userEmail);
}

然后在onFormSubmit函数里,用checkForm2Submission(userEmail)代替之前的form2.getResponses()逻辑就行。

内容的提问来源于stack exchange,提问作者Rohit Sawai

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:56:55