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

如何用Google Script对比两列ID并设置指定单元格值

跨工作表ID匹配并更新单元格值解决方案

我来帮你搞定这个需求,先指出原代码里的几个关键问题:你只读取了Sheet2的B2单个单元格,而不是整个B列的ID;循环范围也会漏掉最后一行数据。下面是修正后的代码,还优化了匹配效率,更适合数据量较大的场景:

function IDValidation() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheet1 = ss.getSheetByName('Sheet1');
  const sheet2 = ss.getSheetByName("Sheet2");

  // 读取Sheet1 A列(ID1)从第2行到最后一行的数据(跳过表头)
  const sheet1Ids = sheet1.getRange(2, 1, sheet1.getLastRow() - 1, 1).getValues();
  // 读取Sheet2 B列(ID2)从第2行到最后一行的数据
  const sheet2Ids = sheet2.getRange(2, 2, sheet2.getLastRow() - 1, 1).getValues();

  // 将Sheet2的ID转为Set,这样查找速度会快很多,尤其是数据多的时候
  const idSet = new Set(sheet2Ids.flat());

  // 遍历Sheet1的每一个ID
  for (let i = 0; i < sheet1Ids.length; i++) {
    const currentId = sheet1Ids[i][0];
    // 如果当前ID在Sheet2的ID集合里,就把对应行的C列设为"Close"
    if (idSet.has(currentId)) {
      sheet1.getRange(i + 2, 3).setValue("Close");
    }
  }
}

关键改进点:

  • 完整读取ID列:原代码只拿了Sheet2的B2单元格,现在改为读取整个B列的有效数据,确保所有ID都参与匹配。
  • 高效查找:用Set存储Sheet2的ID,查找时间复杂度从O(n)降到O(1),数据量大时性能提升明显。
  • 修正循环范围:原循环会漏掉最后一行,现在的循环覆盖所有Sheet1的ID行。
  • 代码简洁性:用const替代不必要的var,直接使用提前获取的工作表对象,避免重复查找工作表。

怎么用:

  1. 打开你的Google表格,点击顶部菜单「扩展程序」→「Apps脚本」
  2. 把原来的代码替换成上面的版本
  3. 保存脚本,然后运行IDValidation函数(第一次运行需要授权,按提示操作就行)

这样就能实现你要的功能:只要Sheet1 A列的ID在Sheet2 B列里存在,对应行的C列就会自动设为"Close"。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:20:44