2016-08-22 75 views
0

基本上标题说什么 - 我有Google表格,由Google表单提供支持。我们希望脚本具有以下功能: 如果当天提交了重复条目,请删除旧条目 如果重复条目超过24小时后提交,请将两个条目留在工作表上。Google表格 - 删除旧的重复条目,仅在提交时间少于一天后才提交

下面是我得到了什么,它消除了最新的条目,不管它被提交时:

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); 
} 

回答

0

你的标题和你的描述似乎相互矛盾。基于your previous question我假设描述是正确的,并且只有在第二个副本之前少于24小时提交时才想删除旧的副本。

首先,只要输入第一个if块,您就不需要设置duplicate=true。 ,只除去两个年长,改变你的第二个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以清除/写入完成。

+0

是的,完全玷污了那个标题! 我用新的脚本编辑完整 - 现在它什么都不做... – crossbeats

+0

我编辑了我的答案,包括一个可能的新方法。 –