Google表单提交校验失败:乐器借出校验脚本问题求助
乐器借出表单脚本问题修正方案
原代码核心问题
- 逻辑判断完全偏离需求:你描述的规则是「借出时Status表对应单元格显示乐器名称,在库时为空」,但原代码用
data[i][2] % 2 == 1(判断第三列值是否为奇数)来识别借出状态,完全不匹配你的业务规则。 - 处理方式错误:直接关闭整个表单会导致所有用户无法提交,这不是针对当前违规提交用户的单独提示。
- 未配置触发器:函数没有绑定表单的「提交时」触发器,所以不会自动运行。
修正后的代码
function validateCheckout(e) { // 获取提交的条形码(注意:e.values索引从0开始,这里假设条形码是表单第2个字段,若为第1个则改为e.values[0]) var barcode = e.values[1]; if (!barcode) return; // 打开目标Google Sheet并获取Status工作表 var ss = SpreadsheetApp.openByUrl("https://docs.google.com/spreadsheets/d/13KmLTvxD7WpmPHYzvM-NGkCO25BMpSTIQXkmq_lru0s/edit?pli=1#gid=470306544"); var statusSheet = ss.getSheetByName("Status"); var data = statusSheet.getDataRange().getValues(); // 遍历查找对应条形码的乐器状态 for (var i = 0; i < data.length; i++) { // 假设第1列是条形码(索引0),第3列是状态列(索引2),请根据你的实际表结构调整索引 if (data[i][0] === barcode) { // 检查状态列是否不为空(即乐器已借出) if (data[i][2] && data[i][2].trim() !== "") { // 删除当前无效的提交记录 e.response.deleteResponse(); // 若表单收集了用户邮箱,发送错误提示邮件 var respondentEmail = e.response.getRespondentEmail(); if (respondentEmail) { MailApp.sendEmail(respondentEmail, "乐器借出申请失败", "This instrument has already been signed out. Please sign it in first"); } return; } break; } } }
配置步骤
- 打开「LCS Equipment Check Out」表单,进入脚本编辑器。
- 替换原代码为上述修正代码,务必根据你的实际表结构调整以下内容:
- 条形码在表单中的字段索引:
e.values[1]对应第2个字段,若条形码是第1个字段则改为e.values[0]。 - Status表的列索引:
data[i][0]是条形码所在列,data[i][2]是状态列,根据你的表格列顺序修改索引。
- 条形码在表单中的字段索引:
- 设置触发器:
- 点击脚本编辑器左侧的时钟图标(触发器面板)。
- 点击「添加触发器」,配置如下:
- 选择函数:
validateCheckout - 事件源:
表单 - 事件类型:
提交时
- 选择函数:
- 保存并授权脚本所需的权限。
补充说明
- 若不需要邮件提示,也可以修改表单的「提交后确认消息」,但由于脚本会删除无效提交,用户可能看不到该提示,因此邮件通知是更可靠的方式。
- 确保Google Sheet的共享权限设置正确,脚本需要能访问该Sheet。
内容的提问来源于stack exchange,提问作者Michael Jensen
相关产品推荐
相关产品推荐

