如何在Google Forms中验证输入ID是否存在于Google Sheet列中?
Google表单ID合法性预验证实现方案
由于TextValidationBuilder本身不支持直接读取外部表格数据,你可以通过以下两种方式实现ID验证需求:
方法1:预加载ID列表到表单验证规则(即时验证)
这种方式会把表格中的ID同步到表单的输入验证规则中,用户输入时就能立刻收到合法性反馈,步骤如下:
- 打开目标Google表单,点击右上角「扩展程序」→「Apps脚本」进入脚本编辑器。
- 替换默认代码为以下内容,注意修改其中的表格ID、表单问题标题、ID所在列参数:
function syncIDValidation() { // 替换为你的Google表格ID(URL中/d/后的字符串) const spreadsheetId = "你的表格ID"; // 替换为表单中要求输入ID的问题标题 const formQuestionTitle = "输入你的ID"; // 替换为表格中ID所在列(A列=1,B列=2,以此类推) const idColumn = 1; // 读取表格中的ID数据 const sheet = SpreadsheetApp.openById(spreadsheetId).getActiveSheet(); const idRange = sheet.getRange(2, idColumn, sheet.getLastRow() - 1); // 假设第一行是表头 const idList = idRange.getValues().flat().filter(id => id !== ""); // 提取非空ID // 定位表单中的ID输入项 const form = FormApp.getActiveForm(); const items = form.getItems(); let idItem = null; for (let item of items) { if (item.getTitle() === formQuestionTitle) { idItem = item.asTextItem(); break; } } // 设置验证规则 if (idItem && idList.length > 0) { const validation = FormApp.createTextValidation() .requireTextMatchesPattern("^(" + idList.join("|") + ")$") .setHelpText("请输入有效的ID,该ID不存在于系统中") .build(); idItem.setValidation(validation); } }
- 手动运行一次
syncIDValidation函数,完成脚本对表格和表单的访问授权。 - 若表格ID会定期更新,点击脚本编辑器左侧「触发器」图标,添加定时触发器(如每日运行),自动同步ID列表到表单验证规则。
方法2:提交后验证并拦截无效提交
如果ID列表实时变动,预加载方式无法及时同步,可通过提交触发事件拦截无效提交:
- 在Apps脚本编辑器中添加以下代码,修改对应参数:
function onFormSubmit(e) { // 替换为你的Google表格ID const spreadsheetId = "你的表格ID"; // 替换为表单中ID回答的索引(第一个问题为0,依次递增) const submittedIdIndex = 0; // 替换为表格中ID所在列 const idColumn = 1; // 获取用户提交的ID const submittedId = e.response.getItemResponses()[submittedIdIndex].getResponse(); // 检查ID是否存在于表格 const sheet = SpreadsheetApp.openById(spreadsheetId).getActiveSheet(); const idRange = sheet.getRange(2, idColumn, sheet.getLastRow() - 1); const idList = idRange.getValues().flat(); if (!idList.includes(submittedId)) { // 删除无效提交记录 e.response.setDestination(FormApp.DestinationType.NONE); // 可选:给用户发送验证失败邮件(需用户提交邮箱) // const userEmail = e.response.getRespondentEmail(); // MailApp.sendEmail(userEmail, "ID验证失败", "你输入的ID无效,请重新提交。"); throw new Error("无效ID,提交已被拦截"); } }
- 添加触发器:点击左侧「触发器」,创建表单提交触发事件,选择
onFormSubmit函数,事件类型设为「表单提交」。
注意事项
- 方法1为即时验证,用户输入错误ID无法提交,但需定期同步ID列表;
- 方法2为提交后拦截,适合ID实时变化场景,但用户提交后才会收到反馈;
- 首次运行脚本需完成Google权限授权,按照提示操作即可。
内容的提问来源于stack exchange,提问作者LBrackett
相关产品推荐
相关产品推荐

