Google apps script 应用程序脚本不删除行

Google apps script 应用程序脚本不删除行,google-apps-script,google-sheets,Google Apps Script,Google Sheets,当我在工作表中运行以下函数时: function removeDuplicateRows() { var sheet = SpreadsheetApp.getActiveSheet(); var column = sheet.getRange('D580:D'); var data= column.getValues(); var newData = new Array(); for(i in data){ var row = data[i]; va

当我在工作表中运行以下函数时:

    function removeDuplicateRows() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var column = sheet.getRange('D580:D');
  var data= column.getValues();
  var newData = new Array();
  for(i in data){

    var row = data[i];
    var duplicate = false;
    for(j in newData){

      if(row.join() == newData[j].join()){

        duplicate = true;

      }

    }
    if(!duplicate){
      newData.push(row);

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

}
什么都没发生,只是超时了。当我识别范围时,这似乎是由于我的'column'变量造成的。如果我将其留空,它将运行,但我不希望它到达前580行。有人知道为什么会这样吗

谢谢您的帮助,

试试这个:

function removeDuplicates() {
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getActiveSheet();
  var rg=sh.getRange(580,4,sh.getLastRow(),1);
  var vA=rg.getValues();
  var uA=[];
  var dC=0;
  for(var i=0;i<vA.length;i++) {
    if(uA.indexOf(vA[i].join())==-1) {
      uA.push(vA[i].join());
    }else{
      sh.deleteRow(i + rg.getRow() - dC);
      dC++;
    }
  }
}
函数removeDuplicates(){
var ss=SpreadsheetApp.getActive();
var sh=ss.getActiveSheet();
var rg=sh.getRange(580,4,sh.getLastRow(),1);
var vA=rg.getValues();
var uA=[];
var dC=0;

对于(var i=0;我查看您的算法。双嵌套
for
是不好的。特别是当您缺少短路逻辑步骤时,比如在知道有重复项时停止内部循环。但是,有比将内容存储在数组中并每次遍历该数组更好的方法。请参阅我关于重复检测的一些回答。PS:这个代码片段不可能删除行-你从来没有调用过
Sheet#deleteRow
它可以在我的测试电子表格上工作(数据更少)。我没有把Sheet#deleteRow放进去?