如何在Google Sheets Apps Script中仅在奇数行搜索指定值
解决Google Sheets Apps Script仅在奇数行搜索值的问题
你可以通过两种方式实现仅在奇数行搜索目标值:
方法一:先构建奇数行范围集合再搜索
直接从指定区域提取所有奇数行的单元格范围,逐个用createTextFinder搜索,找到第一个匹配项后设置为当前单元格,从根源上避免偶数行的无效搜索:
const targetSheet = sh1; const startRow = 3; const lastRow = targetSheet.getLastRow(); const targetColumnCount = targetSheet.getLastColumn(); let foundRange = null; // 遍历从第3行开始的所有奇数行(步长设为2) for (let row = startRow; row <= lastRow; row += 2) { const currentRowRange = targetSheet.getRange(row, 1, 1, targetColumnCount); foundRange = currentRowRange.createTextFinder(folio) .matchEntireCell(true) .findNext(); // 找到匹配项立刻终止循环 if (foundRange) break; } // 找到结果则设置为当前单元格,未找到可按需处理 if (foundRange) { targetSheet.setCurrentCell(foundRange); } else { console.log("未在奇数行找到目标值"); }
方法二:搜索后过滤奇数行
先在整个区域执行搜索,再判断找到的单元格是否属于奇数行,若为偶数行则继续查找下一个匹配项,直到找到符合要求的结果:
const searchRange = sh1.getRange(3, 1, sh1.getLastRow()-2, sh1.getLastColumn()); let foundRange = searchRange.createTextFinder(folio) .matchEntireCell(true) .findNext(); // 循环过滤偶数行的匹配结果 while (foundRange) { if (foundRange.getRow() % 2 !== 0) { // 校验是否为奇数行 break; } // 从当前匹配项的下一个位置继续搜索 foundRange = searchRange.createTextFinder(folio) .matchEntireCell(true) .findNext(foundRange); } // 设置当前单元格(找到结果的前提下) if (foundRange) { sh1.setCurrentCell(foundRange); } else { console.log("未在奇数行找到目标值"); }
两种方法的适用场景
- 方法一适合行数较少的区域,直接限定搜索范围,执行效率更高;
- 方法二更适配大区域搜索,无需提前构建大量独立范围,逻辑更简洁。
内容的提问来源于stack exchange,提问作者Seb Mainguet
相关产品推荐
相关产品推荐

