2016-08-17 1 views
0

Ich führe ein Formular aus, das in ein Google-Blatt einfließt. Wir stoßen auf das Problem, dass Nutzer mehrfach auf "Senden" klicken, was zu mehreren Übermittlungen der gleichen Informationen in schneller Folge führt. Wir haben jedoch auch Benutzer, die zu einem späteren Zeitpunkt zurückkommen und ein neues Formular ausfüllen.Google Tabellen - Duplikate nur entfernen, wenn sie am selben Tag eingereicht wurden

Ich habe gefunden, wie doppelte Einträge entfernt werden - aber ist es möglich, das Skript auch so zu definieren, dass es nur entfernt wird, wenn sie am selben Tag eingereicht wurden? Die Form fügt automatisch einen Zeitstempel in diesem Format: 8/15/2016 16:39:27

Mein Skript ist wie folgt:

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

Es prüft Spalten D (3) und E (4) (die der Postleitzahl und der E-Mail-Adresse des Benutzers entsprechen) für Duplikate.

Ich kann das Blatt bei Bedarf teilen - es hat sowohl E-Mail-Adressen und Home-Adressen unserer Benutzer, so dass ich wieder mit Dummy-Daten füllen müsste!

Antwort

1

Sie könnten etwas wie die folgenden Zeilen in Ihrem if(row[3]==... Block hinzufügen. Angenommen, der Zeitstempel ist in der ersten Spalte:

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 

Auf diese Weise, wenn Sie für die gleiche Postleitzahl und E-Mail-Adresse überprüfen (? Brauchen Sie wirklich die Postleitzahl, da E-Mail-Adressen eindeutig sind), markieren Sie die Antwort als Duplikat, wenn es innerhalb von 24 Stunden nach der letzten Antwort eingereicht wurde. Die && oldTime != newTime stellt sicher, dass Sie das Ereignis nicht löschen, wenn es selbst in der verschachtelten Schleife erreicht.

+0

Das scheint nicht zu funktionieren - es entfernt den neuesten Eintrag unabhängig davon, wann einer der Einträge eingereicht wurde. – crossbeats

+0

Es scheint, als würde das wegen Ihrer verschachtelten Schleifen passieren. Wenn Ihre äußere Schleife auf dem ersten Ereignis ist und die innere Schleife das erste Ereignis erreicht, denkt es, dass es ein Duplikat ist. Sie können dies beheben, indem Sie der Anweisung "if" in der Antwort '&& oldTime! = NewTime' hinzufügen. Ich habe es oben geändert. –

Verwandte Themen