如何在运行时删除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
相关产品推荐
相关产品推荐

