Google Script 表单提交防重复数据功能异常排查求助
Google Script 跨表提交去重功能问题修复
原代码错误原因
- 循环逻辑错误:你将数据写入操作放在了逐行比对的else分支中,只要某一行数据和当前录入的身份证号不匹配就会触发写入,哪怕后续行存在匹配的重复数据也不会被拦截
- 匹配到重复后未终止程序:弹出重复提示后没有终止函数运行,后续逻辑仍会执行
- 变量重名冲突:初始用
values变量存储output表全量数据,后续写入时又重新声明了同名values变量存储待写入内容,会导致逻辑异常
修正后代码
function submitData() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var formSS = ss.getSheetByName("input"); // 数据录入表 var datasheet = ss.getSheetByName("output"); // 数据存储表 var currentId = formSS.getRange("A3").getValue(); // 读取当前录入的身份证号 var outputAllData = datasheet.getDataRange().getValues(); // 获取output表所有已存数据 var isDuplicate = false; // 遍历比对身份证号 for (var i = 0; i < outputAllData.length; i++) { if (outputAllData[i][1] == currentId) { // output表B列存储身份证号,索引为1 isDuplicate = true; break; // 匹配到重复直接跳出循环 } } // 按校验结果执行对应逻辑 if (isDuplicate) { SpreadsheetApp.getUi().alert('Duplicate data. you need to click update'); return; // 终止函数运行 } else { // 组装待写入数据 var writeData = [[formSS.getRange("E2").getValue(), formSS.getRange("A3").getValue()]]; // 写入到output表最后一行下方 datasheet.getRange(datasheet.getLastRow() + 1, 1, 1, 2).setValues(writeData); } }
逻辑说明
- 新增重复标记位
isDuplicate,先完成全量数据比对再执行后续逻辑,避免逐行判断的逻辑漏洞 - 匹配到重复后直接调用
return终止函数,不会再执行写入操作 - 拆分不同用途的变量命名,避免重名冲突
内容的提问来源于stack exchange,提问作者Sathya
相关产品推荐
相关产品推荐

