Google表格 - 仅在少于一天后提交的情况下删除旧的重复条目

时间:2016-08-22 14:54:47

标签: google-apps-script google-sheets

基本上标题是什么 - 我有一张Google表格,由Google表格提供支持。我们喜欢执行以下操作的脚本: 如果当天提交了重复条目,请删除旧条目 如果超过24小时后提交了重复条目,请在表格中留下这两个条目。

以下是我所获得的内容,它会删除最新的条目,无论何时提交:

  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 Column E in the old entry matches Column E in the new entry
      if(row[4] == newData[j][4]){
        //Pull New Timestamp and Old Timestamp
        var newTime = Date.parse(newData[j][1]);
        var oldTime = Date.parse(row[1]);
        if (newTime-oldTime<(1000*60*60*24) && newTime>oldTime) duplicate=true; // number is milliseconds in 24 hours      
      }
    }
    if(!duplicate){
      newData.push(row);
    }
  }
  sheet.clearContents();
  sheet.getRange(1, 1, newData.length, newData[0].length).setValues(newData);
}

1 个答案:

答案 0 :(得分:0)

您的标题和描述似乎相互矛盾。基于your previous question我假设说明正确,并且您希望仅在第二次复制之前不到24小时提交时删除较旧的副本。

首先,您在输入第一个duplicate=true区块后立即设置if,这是您不想要的。要仅删除两者中的较旧,请将第二个if条件更改为

if (newTime-oldTime<(1000*60*60*24) && newTime>oldTime) duplicate=true;

这应该注意删除最新的条目,因为当时间是您要比较的两个中较小的一个时,您只会将该行标记为重复。

修改

您可以采用不同的方法并尝试删除重复的行,而不是将非重复行添加到新数组中。那怎么样:

var sheet = SpreadsheetApp.getActiveSheet();
var data = sheet.getDataRange.getValues();
var nRows = data.length;
for (var i=0; i<nRows; i++){
  var time1 = Date.parse(data[i][4]);  // Time to which you will compare the others
  for (var j=0; i<nRows; j++){
    var time2 = Date.parse(data[j][4]);  // Time to compare to the first time
    if (time1>time2 && time1-time2<(1000*60*60*24)){ // time 2 is older by less than 24 hours
      data.splice(j,1); // Remove older item
      j--; // Decrement j so it does the same row since you removed one
      nRows--; // Now have one fewer rows in data
    }
  }
}

这样你就可以修改一个数组,而不是创建第二个数组。您可以使用data代替newData完成清除/写入。