Google表格 - 仅在同一天提交重复项时删除重复项

时间:2016-08-17 13:09:50

标签: google-apps-script google-sheets

我正在运行一个表单,该表单会输入Google表格。我们遇到了多次点击提交的用户问题,导致在快速连续中多次提交相同的信息。但是,我们也会让用户稍后再回来填写新表格。

我已经找到了删除重复条目的方法 - 但是是否可以定义脚本,只有在同一天提交时才删除它们? 表单会自动添加以下格式的时间戳:8/15/2016 16:39:27

我的脚本如下:

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(row[3] == newData[j][3] && row[4] == newData[j][4]){
        duplicate = true;
      }
    }
    if(!duplicate){
      newData.push(row);
    }
  }
  sheet.clearContents();
  sheet.getRange(1, 1, newData.length, newData[0].length).setValues(newData);
}

它检查列D(3)和E(4)(对应于用户的邮政编码和电子邮件地址)是否有重复项。

如果需要,我可以共享表格 - 它有我们用户的电子邮件地址和家庭住址,所以我需要重新填充虚拟数据!

1 个答案:

答案 0 :(得分:1)

您可以在if(row[3]==...块中添加类似以下内容的内容。假设时间戳在第一列:

var newTime = Date.parse(newData[j][0]);
var oldTime = Date.parse(row[0]);
if (newTime-oldTime<(1000*60*60*24) && oldTime != newTime) duplicate=true; // number is milliseconds in 24 hours

这样,一旦您检查相同的邮政编码和电子邮件地址(您真的需要邮政编码,因为电子邮件地址是唯一的吗?),如果在最后一次回复的24小时内提交,则将回复标记为重复。 && oldTime != newTime确保您在嵌套循环中到达自身时不会删除该事件。