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

如何用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;
}

关键说明

  1. 数组扁平化处理:通过flat()方法把GS返回的二维数组转为一维数组,方便用includes()直接判断值是否存在。
  2. 输入值去空格:用trim()去除输入值前后的空格,避免因空格导致匹配失败。
  3. GS代码优化:原代码中第二个return语句永远无法执行,变量名sheetNames改为sheet更贴合语义,不影响功能。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 05:01:19