如何在保留具有另一列的最高值的行的同时对行进行重复数据删除?

时间:2017-03-15 21:41:50

标签: google-apps-script google-sheets

我有一个很大的电子表格,我只想根据一个列进行重复数据删除,但有一个转折点。

我使用this script的变体,这里是:

function removeDuplicates() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var data = sheet.getDataRange().getValues();
  var newData = new Array();
  for(i in data){
    var row = data[i];
    var duplicate = false;
    for(j in newData){
      if(row[7] == newData[j][7]){
        duplicate = true;
      }
    }
    if(!duplicate){
      newData.push(row);
    }
  }
  sheet.clearContents();
  sheet.getRange(1, 1, newData.length, newData[0].length).setValues(newData);
}

现在我需要重复数据删除更加细致,工作使得它在另一列中保留具有最高值的行(在这种情况下,列B又称为1)。我怎么能修改我的脚本来解释这个?

1 个答案:

答案 0 :(得分:0)

只需将if语句修改为以下内容:

if(row[7] == newData[j][7] && row[1] < newData[j][1]){
        duplicate = true;
        break; //This will stop the loop when a duplicate is found. 
      }

对于列b中的值小于列B中给定重复条目的列B中的最大值的任何行,这将设置duplicate = true。

希望有所帮助

编辑之前忽略此错误

在下面的代码中,循环应该遍历数据数组而不是newData数组(newData数组将为空!)

for(j in newData){
      if(row[7] == newData[j][7] && row[1] < newData[j][1]){
            duplicate = true;
            break; //This will stop the loop when a duplicate is found. 
          }
    }

查找以下修改后的代码:

function removeDuplicates() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var data = sheet.getDataRange().getValues();
  var newData = new Array();
  for(i in data){
    var row = data[i];
    var duplicate = false;
    // I replaced all newData to data where appropiate 
    for(j in data){
      if(row[7] == data[j][7] && row[1] < data[j][1]){
            duplicate = true;
            break; //This will stop the loop when a duplicate is found. 
          }
    }
    if(!duplicate){
      newData.push(row);
    }
  }
  sheet.clearContents();
  sheet.getRange(1, 1, newData.length, newData[0].length).setValues(newData);
}