Google Sheets中indexOf返回错误值的问题求助
问题核心与修复方案
你的代码问题出在把二维数组转成字符串后用indexOf——这时候你找的是字符串里的子串位置,不是数组元素的索引,自然得到错误结果。比如你看到的temp_chunks是逗号分隔的字符串,indexOf("2080")返回的是这个字符串中"2080"第一次出现的字符位置,不是它在原数组里的元素位置。
修复后的代码
var chunk = DS_Home.getRange('E6').getValue().toString(); var temp = SpreadsheetApp.openById(TEMP_ID); var temp_sheet = temp.getSheetByName('Genie'); // 将二维数组转为一维数组,同时统一格式并过滤空值 var temp_chunks = temp_sheet.getRange('A2:A').getValues() .flat() // 把[[val1], [val2]]转为[val1, val2] .filter(val => val !== '') // 去掉空单元格的元素 .map(val => val.toString()); // 统一转成字符串,和chunk格式对齐 var index = temp_chunks.indexOf(chunk); if (index !== -1) { // 从A2开始,所以元素索引+2就是对应的行号 temp_sheet.getRange(index + 2, 2).setValue('TRUE'); }
额外排查方向
- 确认数组结构:
getValues()返回的是二维数组,每个单元格对应一个子数组,必须先转成一维数组才能正确使用indexOf找元素索引 - 统一数据类型:确保
chunk和数组内的元素类型完全一致(要么都是字符串,要么都是数字),避免类型不匹配导致indexOf返回-1 - 处理空值:
getRange('A2:A')会包含A列所有空单元格,过滤空值能避免无效元素干扰索引计算 - 增加错误判断:当
index为-1(未找到匹配项)时,跳过赋值操作,防止脚本报错
内容的提问来源于stack exchange,提问作者Venustoisizard
相关产品推荐
相关产品推荐

