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

如何通过Google Apps Script找出列A有但列B没有的URL

找出Google表格中列A存在但列B不存在的URL

实现思路

  • 先提取列B的所有URL,存入Set集合(查找效率远高于数组)
  • 遍历列A的每个URL,判断是否不在列B的集合中
  • 收集符合条件的URL,批量写入列C(减少Spreadsheet API调用次数,提升性能)

完善后的完整代码

function populateColumnC() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = ss.getSheetByName("Sheet1"); 
  const lastRow = sheet.getLastRow();
  // 如果表格没有数据,直接返回
  if (lastRow < 2) return;

  // 设置列C标题
  sheet.getRange(1, 3).setValue('Listed in A but not in B');

  // 获取列A和列B的所有值(从第2行开始)
  const columnAValues = sheet.getRange(2, 1, lastRow - 1).getValues().flat(); // 转成一维数组
  const columnBValues = sheet.getRange(2, 2, lastRow - 1).getValues().flat();

  // 将列B的值存入Set,用于快速查找
  const bUrlSet = new Set(columnBValues.filter(url => url !== "")); // 过滤空值

  // 收集列A中存在但列B中不存在的URL
  const result = columnAValues.filter(url => url !== "" && !bUrlSet.has(url));

  // 清空列C原有数据(从第2行开始)
  sheet.getRange(2, 3, lastRow - 1).clearContent();

  // 将结果写入列C
  if (result.length > 0) {
    sheet.getRange(2, 3, result.length, 1).setValues(result.map(url => [url]));
  }
}

代码关键说明

  • 使用Set优化查找:Set的has()方法时间复杂度为O(1),比数组indexOf()的O(n)效率高,数据量越大优势越明显
  • 批量读写数据:避免在循环中逐个调用setValue(),改用getValues()和setValues()批量操作,减少API调用次数
  • 过滤空值:排除列中为空的单元格,避免无效判断
  • 清空原有数据:每次运行前清空列C的旧结果,避免数据残留

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 17:56:11