如何用JavaScript实现单输入值在Google Sheets单元格范围的匹配校验
问题
现有一段代码可在Google Sheets单个单元格中查找输入框值,现在要修改为在指定范围A2:A6中查找单个输入值是否匹配。目前输入逗号分隔的所有值能运行,但需求是单个值输入,如何用JavaScript实现?
现有代码
HTML代码
<!DOCTYPE html> <html> <head> <base target="_top"> </head> <br> NAME:<br> <input type="text" id="name"> <script> function checkUser(user_name) { if (document.getElementById("name").value == user_name) { alert("correct"); } else { alert("incorrect"); } } function runCheck() { google.script.run.withSuccessHandler(checkUser).fetchUserValues1() } </script> <input type='button' value='VALIDATE' onclick="runCheck()"> </html>
GS代码
function doGet() { var template = HtmlService.createTemplateFromFile("page1") return template.evaluate().setSandboxMode(HtmlService.SandboxMode.IFRAME); return HtmlService.createHtmlOutputFromFile('page1'); } function fetchUserValues1(){ var ss = SpreadsheetApp.openByUrl("Google Sheet URL"); var sheetNames = ss.getSheetByName("Sheet 1"); var user_name = sheetNames .getRange("A2:A6").getValues(); return user_name; }
修改方案
核心问题
原代码中getValues()返回的是二维数组(格式类似[["张三"],["李四"]]),直接用输入框值和整个数组比较,只有输入所有值逗号分隔时才会匹配,完全不符合单个值匹配的需求。需要在前端遍历数组判断是否存在目标值。
修改后的HTML代码
<!DOCTYPE html> <html> <head> <base target="_top"> </head> <br> NAME:<br> <input type="text" id="name"> <script> function checkUser(userList) { const inputValue = document.getElementById("name").value.trim(); // 把二维数组转为一维数组,再判断输入值是否存在 const flatUserList = userList.flat(); if (flatUserList.includes(inputValue)) { alert("correct"); } else { alert("incorrect"); } } function runCheck() { google.script.run.withSuccessHandler(checkUser).fetchUserValues1() } </script> <input type='button' value='VALIDATE' onclick="runCheck()"> </html>
优化后的GS代码
function doGet() { var template = HtmlService.createTemplateFromFile("page1"); return template.evaluate().setSandboxMode(HtmlService.SandboxMode.IFRAME); // 原代码中第二个return永远不会执行,可保留或删除 } function fetchUserValues1(){ var ss = SpreadsheetApp.openByUrl("Google Sheet URL"); var sheet = ss.getSheetByName("Sheet 1"); var userList = sheet.getRange("A2:A6").getValues(); return userList; }
关键说明
- 数组扁平化处理:通过
flat()方法把GS返回的二维数组转为一维数组,方便用includes()直接判断值是否存在。 - 输入值去空格:用
trim()去除输入值前后的空格,避免因空格导致匹配失败。 - GS代码优化:原代码中第二个
return语句永远无法执行,变量名sheetNames改为sheet更贴合语义,不影响功能。
内容的提问来源于stack exchange,提问作者ONTIVER
相关产品推荐
相关产品推荐

