我正在运行一个表单,它提供给谷歌表单。我们遇到了用户多次点击提交导致多次快速连续提交相同信息的问题。但是,我们也让用户在稍后的日期返回并填写新表单。
我发现如何删除重复的条目-但是否有可能也定义脚本,只删除他们,如果他们在同一天提交?这个表单会自动添加时间戳,格式如下: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)(对应于用户的邮政编码和电子邮件地址)是否重复。
如果需要,我可以共享工作表-它有我们的用户的电子邮件地址和家庭地址,所以我需要用虚拟数据重新填充!
您可以在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
确保您不会删除事件。