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

Google表单提交校验失败:乐器借出校验脚本问题求助

乐器借出表单脚本问题修正方案

原代码核心问题

  1. 逻辑判断完全偏离需求:你描述的规则是「借出时Status表对应单元格显示乐器名称,在库时为空」,但原代码用data[i][2] % 2 == 1(判断第三列值是否为奇数)来识别借出状态,完全不匹配你的业务规则。
  2. 处理方式错误:直接关闭整个表单会导致所有用户无法提交,这不是针对当前违规提交用户的单独提示。
  3. 未配置触发器:函数没有绑定表单的「提交时」触发器,所以不会自动运行。

修正后的代码

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;
    }
  }
}

配置步骤

  1. 打开「LCS Equipment Check Out」表单,进入脚本编辑器。
  2. 替换原代码为上述修正代码,务必根据你的实际表结构调整以下内容:
    • 条形码在表单中的字段索引:e.values[1]对应第2个字段,若条形码是第1个字段则改为e.values[0]。
    • Status表的列索引:data[i][0]是条形码所在列,data[i][2]是状态列,根据你的表格列顺序修改索引。
  3. 设置触发器:
    • 点击脚本编辑器左侧的时钟图标(触发器面板)。
    • 点击「添加触发器」,配置如下:
      • 选择函数:validateCheckout
      • 事件源:表单
      • 事件类型:提交时
    • 保存并授权脚本所需的权限。

补充说明

  • 若不需要邮件提示,也可以修改表单的「提交后确认消息」,但由于脚本会删除无效提交,用户可能看不到该提示,因此邮件通知是更可靠的方式。
  • 确保Google Sheet的共享权限设置正确,脚本需要能访问该Sheet。

内容的提问来源于stack exchange,提问作者Michael Jensen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 07:05:26