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

使用脚本在Google Sheets中基于第二列移除重复行

基于第二列移除重复行的修正代码

你的代码核心问题是没有正确获取每行的第二列数据,还存在变量重复声明、行引用错误的问题,以下是修正后的可用代码:

function removeDuplicates() {
  // 获取目标工作表
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('sheet1');
  // 获取表格所有数据
  var data = sheet.getDataRange().getValues();
  var newData = [];
  var seenValues = []; // 存储已出现过的第二列值

  // 遍历每一行数据
  for (var i = 0; i < data.length; i++) {
    var currentRow = data[i];
    // 获取当前行的第二列数据(数组索引从0开始,第二列对应索引1)
    var columnBValue = currentRow[1];
    var isDuplicate = false;

    // 检查该值是否已存在
    if (seenValues.indexOf(columnBValue) > -1) {
      isDuplicate = true;
    } else {
      seenValues.push(columnBValue);
    }

    // 非重复行加入新数据数组
    if (!isDuplicate) {
      newData.push(currentRow);
    }
  }

  // 清空原表并写入去重后的数据
  sheet.clearContents();
  sheet.getRange(1, 1, newData.length, newData[0].length).setValues(newData);
}

关键修改说明:

  • 移除重复的sheet变量声明,统一通过工作表名称定位目标表
  • 循环中正确获取当前行currentRow = data[i],而非固定取第一行第二列
  • 提取当前行的第二列值columnBValue = currentRow[1],以此作为去重判断依据
  • 将存储已出现值的数组命名为seenValues,语义更清晰
  • 简化重复判断逻辑,去掉冗余的赋值语句

大数据量优化方案:

如果你的表格有30000行,indexOf的查找效率偏低,建议改用Set提升性能,修改后的版本如下:

function removeDuplicatesWithSet() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('sheet1');
  var data = sheet.getDataRange().getValues();
  var newData = [];
  var seenValues = new Set();

  for (var i = 0; i < data.length; i++) {
    var currentRow = data[i];
    var columnBValue = currentRow[1];

    if (!seenValues.has(columnBValue)) {
      seenValues.add(columnBValue);
      newData.push(currentRow);
    }
  }

  sheet.clearContents();
  sheet.getRange(1, 1, newData.length, newData[0].length).setValues(newData);
}

Set的has方法查找时间复杂度为O(1),远快于indexOf的O(n),处理大量数据时运行速度会明显提升。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 11:25:29