GAS查询Google Sheet匹配行返回数据 新增else分支后匹配失效
问题根因
你新增的else分支位置错误,放在了for循环的单次判断内部:
循环从i=1(表格第二行,即首条数据行)开始执行,只要第一行数据的B列值和输入的serial不匹配,就会立刻触发else分支返回{ name: "Null!", email: "Null!" },函数直接终止运行,根本不会继续遍历后续的行,所以只有第一行匹配时能正常返回结果,其余行全部直接返回Null。
原代码没有else分支时,只有遍历过程中找到匹配项才会return终止函数,找不到的话会走完整个循环再结束,因此可以正常工作。
修复方案
把返回未匹配结果的逻辑移到for循环外部,等所有行全部遍历完成、确认没有匹配项时,再返回Null结果,不要把未匹配的返回逻辑放在循环的单次判断里。
修复后的服务端nameSearch函数代码如下:
function nameSearch(serial){ try { var sheet = SpreadsheetApp.getActive().getSheetByName("sheetName"); var data = sheet.getDataRange().getValues(); for (var i = 1; i < data.length; i++) { if (data[i][1] == serial) { var name = data[i][0]; var email = data[i][2]; return { name: name, email: email }; } } // 全表遍历完成仍未找到匹配项,才返回空结果 return { name: "Null!", email: "Null!" }; } catch(e) { alert(e) } }
优化建议
- 目前判断匹配用的是弱相等
==,输入框获取的值默认是字符串类型,如果表格中序号列存的是数字格式,可能出现类型不匹配导致查找失败,建议统一转成字符串后用严格相等判断:String(data[i][1]) === String(serial) - 可以在前端
search函数里加个输入非空判断,输入为空时不调用服务端接口,减少不必要的请求。
内容的提问来源于stack exchange,提问作者Mahmoud
相关产品推荐
相关产品推荐

