从最后一行删除Google电子表格中的重复行

时间:2017-12-09 06:26:19

标签: javascript google-apps-script

我发现此代码用于删除Google spraedsheet中的重复行: 从这个网址: https://developers.google.com/apps-script/articles/removing_duplicates

function removeDuplicates() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1');
  var data = sheet.getDataRange().getValues();
  var last=sheet.getLastRow();
  var newData = new Array();
  for(i in data){
    //Logger.log(i);
    var row = data[i];
    //Logger.log(row[5]);
    var duplicate = false;
    for(j in newData){
      //Logger.log(newData[j][5]);
      if(row[5] == newData[j][5]){
        duplicate = true;
      }
    }
    if(!duplicate){
      newData.push(row);
    }
  }
  sheet.clearContents();
  sheet.getRange(1, 1, newData.length, newData[0].length).setValues(newData);
}

但是这个函数开始从第一行删除重复行,我想开始从工作表的最后一行删除。 我怎么能这样做?

3 个答案:

答案 0 :(得分:1)

尝试使用JavaScript数组reverse()方法。它在下面使用了两次:

function removeDuplicates() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1');
  var data = sheet.getDataRange().getValues();

  data.reverse(); //reverses the row order.

  var last=sheet.getLastRow();
  var newData = new Array();
  for(i in data){
    //Logger.log(i);
    var row = data[i];
    //Logger.log(row[5]);
    var duplicate = false;
    for(j in newData){
      //Logger.log(newData[j][5]);
      if(row[5] == newData[j][5]){
        duplicate = true;
      }
    }
    if(!duplicate){
      newData.push(row);
    }
  }

  newData.reverse(); // reverses your data back to its original order.

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

如果有问题,请告诉我。

答案 1 :(得分:0)

此代码从顶部到底部,即从第1行到第2行,我想,您想要反向,即从底部到顶部,最后一行到第一行。

对于此结果,您可以尝试以下代码段:

function removeDuplicates() {
    var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1');
    var data = sheet.getRange(1, 1, sheet.getLastRow(), 6).getValues();
    var last=sheet.getLastRow();
    var newData = new Array();
    for(i = data.length - 1; i--; i >= 0){
        //Logger.log(i);
        var row = data[i];
        //Logger.log(row[5]);
        var duplicate = false;
        for(j = newData.length - 1; j--; j >= 0){
            //Logger.log(newData[j][5]);
            if(row[5] == newData[j][5]){
                duplicate = true;
            }
        }
        if(!duplicate){
            newData.unshift(row); //I am trying to insert element in start of array instead of end
        }
    }
    sheet.clearContents();
    sheet.getRange(1, 1, newData.length,newData[0].length).setValues(newData);
}

此代码未经测试。如果这不起作用或者您有任何反馈/问题,请告诉我。

感谢。

答案 2 :(得分:0)

我相信我来得很晚,可以使您免于所有麻烦,但只是为了确保到达此线程的人们不会以同样的挫败感结束,而是按照此处提供的指南来解决问题-

https://ladwhocodes.blogspot.com/2019/02/remove-duplicate-rows-from-your-google.html

按照链接上的注释获得所需的内容。