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

如何使用App Script基于其他工作表的ID列表过滤抓取的数据?

问题

我需要抓取数据,但仅筛选出第13列(Col13)的ID存在于另一工作表中的记录。目前已实现硬编码单个ID的筛选逻辑,代码如下:

var sid = ss.getSheetByName('sid list').getRange('A2:A').getValues(); //capture list of IDs
if(temp[13] == 243558369) {
    temp.push(counter)
    // console.log(temp)
    toPrint.push(temp)
    counter++
}

待匹配的ID列表通过以下代码获取:

var sid = ss.getSheetByName('sid list').getRange('A2:A').getValues(); //capture list of IDs

请指导如何修改代码以实现基于该ID列表的筛选。

解决方案

核心是先把获取到的ID列表转换成高效查找的集合(Set),再用集合判断当前行ID是否符合条件,具体修改如下:

修改后的代码片段

// 优化获取ID列表的逻辑,避免读取空行
var sidSheet = ss.getSheetByName('sid list');
var lastRow = sidSheet.getLastRow();
// 只读取有数据的范围:从A2到最后一行的A列
var sidRange = sidSheet.getRange(2, 1, lastRow - 1, 1);
var sidValues = sidRange.getValues();

// 把二维数组转成一维数组,过滤空值后存入Set
var idSet = new Set(sidValues.flat().filter(id => id !== ""));

// 修改原筛选判断逻辑
if(idSet.has(temp[13])) {
    temp.push(counter)
    // console.log(temp)
    toPrint.push(temp)
    counter++
}

关键说明

  • 用getLastRow()获取工作表最后一行数据的行号,避免读取大量无意义的空行,提升运行效率
  • flat()方法将getValues()返回的二维数组(格式为[[id1], [id2], ...])转换成一维数组
  • filter(id => id !== "")过滤列表中的空值,避免无效空ID存入Set
  • Set的has()方法判断元素是否存在的时间复杂度为O(1),比直接遍历数组的效率高很多,尤其适合ID数量较多的场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 02:55:08