如何使用脚本删除Google表格中的重复行

时间:2019-10-15 23:50:42

标签: csv google-apps-script google-sheets google-sheets-api google-sheets-formula

我目前有一列名为JobID的数据。在此列中,每天重复运行的导入中有重复项,并且会在有问题的JobID上获取最新数据,并将其追加到工作表的顶部。

因此,最近的JobID行是我们需要的数据行。

我想知道是否存在可以在工作表上运行的名为“历史记录”的脚本,以查找JobID列,在下面的每一行中搜索重复项并将其删除,从而保留最上面的,最新的JobID行在工作表中。

我知道使用Google表格中的“删除重复项”工具确实很容易删除重复项...但是我很懒,我正尝试尽可能多地自动执行此过程。

我下面的脚本运行没有错误,但是仍然没有满足我的需要。想知道我在哪里错了:

function removeDuplicates() {
//Get current active Spreadsheet
 var sheet = SpreadsheetApp.getActive();
 var history = sheet.getSheetByName("History");

//Get all values from the spreadsheet's rows
 var data = history.getDataRange().getValues();
//Create an array for non-duplicates
 var newData = [];
//Iterate through a row's cells
 for (var i in data) {
   var row = data[i];
   var duplicate = false;
   for (var j in newData) {
    if (row.join() == newData[j].join()) {
     duplicate = true;
    }
  }
//If not a duplicate, put in newData array
 if (!duplicate) {
  newData.push(row);
 }
}
//Delete the old Sheet and insert the newData array
 history.clearContents();
 history.getRange(1, 1, newData.length, newData[0].length).setValues(newData);
}

1 个答案:

答案 0 :(得分:1)

删除重复的JobID

此功能将使那些最接近列表的顶部。如果您想采用其他方法,请以相反的顺序重新使用列表。

function removeDuplicates() {
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName("History");
  var vA=sh.getDataRange().getValues();
  var hA=vA[0];
  var hObj={};
  hA.forEach(function(e,i){hObj[e]=i;});//header title to index
  var uA=[];
  var d=0;
  for(var i=0;i<vA.length;i++) {
    if(uA.indexOf(vA[i][hObj['JobID']])==-1) {
      uA.push(vA[i][hObj['JobID']]);
    }else{
      sh.deleteRow(i+1-d++);
    }  
  }
}
相关问题