Google Apps Script中getValues返回数组调用indexOf始终返回-1问题
问题原因解析
核心原因是 Google Apps Script 里的 Range.getValues() 方法返回值固定为二维数组,结构为[行数据1, 行数据2, ...],每一行的行数据本身也是一个数组,存储该行对应所有列的单元格值。即使你仅选择了单列范围A:A,返回的每个行数据依然是仅包含1个元素的子数组。
你代码中拿到的cell变量实际结构如下:
[ ["red"], // 第1行(索引0) ["blue"], // 第2行(索引1) ["green"], // 第3行(索引2) // 剩余997行的空单元格,对应值为[""] ]
你看到的日志打印cell[2]输出[green],外层带的方括号就已经说明它是数组类型,而非字符串"green"。你直接对外层二维数组调用indexOf("green"),是在所有元素为数组类型的外层数组里查找字符串,自然匹配不到任何结果,所以返回-1。
解决方法参考
如果要查询单列值的索引,可以先把二维数组拍平为仅包含单元格值的一维数组:
// 提取单列所有单元格的值为一维数组 const colValues = cell.map(row => row[0]); // 此时调用indexOf即可返回正确索引 Logger.log(colValues.indexOf("green")); // 输出2
内容的提问来源于stack exchange,提问作者Mahmoud Shihab
相关产品推荐
相关产品推荐

