2016-03-24 2 views
0

Ich weiß, dass diese Frage ähnlich wie this one ist. Ich bin traurig zu sagen, ich weiß einfach nicht genug, um dem zu folgen.Wie führe ich Spaltenwerte in Google Tabellen mit Google Apps Script zusammen?

Ich erkenne auch, dass es sehr ähnlich zu Google tutorial ist, aber sie erstellen ein neues Array, und ich muss Arrays kombinieren.

Das Problem

Ich versuche, eine permanente Liste aus einer flüchtigen Liste zu erstellen. Die permanente Liste wird täglich aktualisiert. Ich brauche das Skript, um auf einem Blatt nach Duplikaten zu suchen und alles Neue auf ein anderes Blatt zu kopieren. Ich bin mir ziemlich sicher, dass mein Problem hauptsächlich in meiner Logik liegt.

Ich habe all die ähnlichen Antworten zusammengestoßen, die ich finden konnte, um zu helfen (auskommentiert) und ich kann es einfach nicht herausfinden. Weitere Erklärung unten.

Spreadsheet here

Script here

Code.gs

function updateRoster() { 
    var ss = SpreadsheetApp 
    .openById("15DRZRQ2Hcd7MNnAsu_lnZ6n4kiHeXW_OMPP3squbTLE"); 
    var data = ss 
    .getSheetByName("Volatile Data") 
    .getDataRange() 
    .getValues(); 
    var saveData = ss 
    .getSheetByName("All Data") 
    .getDataRange() 
    .getValues(); 
    for (i in data) { 
    var value = data[i][3]; 
    for (j in saveData) { 
     var search = saveData[j][3] 
     if(value == search) { 
     Logger.log(data[i][3]); 
     } 
    } 
    } 
} 

ich dies in der Log:

[16-03-24 06: 35: 44: 914 PDT] 1.00000006E8

[16-03-24 06: 35: 44: 916 PDT] 1.00000012E8

[16-03-24 06: 35: 44: 918 PDT] 1.00000022E8

Was ist richtig, das ist die Duplikate, aber ich muss jede andere Zeile auswählen. Die, die keine Duplikate sind.

Ich habe eine Reihe von Änderungen versucht, aber ich wiederhole immer die Liste des zweiten Blattes. Bitte helfen Sie.

Antwort

2

Einfach ersetzen value == search mit value != search wird nicht funktionieren, da dann würde die Zeile zum zweiten Blatt hinzufügen, wenn auch nur eine der Zeilen in saveData ist anders. Aber es muss überprüft werden, ob alle Zeilen unterschiedlich sind.

Wenn Sie sicher sind, dass Ihre flüchtige Datenblatt keine Duplikate hat in ihm, können Sie es auf diese Weise tun:

var saveSheet = ss.getSheetByName("All Data"); 
loopThroughData: 
for (i in data) { 
    var value = data[i][3]; 
    for (j in saveData) { 
    var search = saveData[j][3] 
    if(value === search) continue loopThroughData; 
    //here we leave the inner loop and jump back to the top if 
    //even one row is equal 
    } 
    saveSheet.appendRow(data[i]); 
} 

edit: aber es in der Regel besser ist, Funktionen zu verwenden, anstatt eine Kombination aus continue und Etiketten. Deshalb würde ich diese Lösung bevorzugen:

function updateRoster() { 
    ... 

    function areThereDuplicates(i) { 
    var value = data[i][3]; 
    for(var j in saveData) { 
     if(saveData[j][3] === value) return true; 
    } 
    return false; 
    } 

    for (i in data) { 
    if(!areThereDuplicates(i)) saveSheet.appendRow(data[i]); 
    } 
} 
+0

Das ist eine tolle Info. Ich hole mich an, sobald ich von der Arbeit komme. Vielen Dank! –

+0

Das hat es geschafft! Ein paar Verbesserungen und es liefert nach Bedarf. Irgendwelche Vorschläge, damit es nur bestimmte Spalten ausspuckt, oder sollte ich das in einer neuen Frage fragen? Ich danke dir sehr!!! –

0

Nun jeder andere Wert bekommen Sie für jede Zeile überprüfen könnte, die andere oder „neue“

ist
if(value != search) { 
    Logger.log(data[i][3]); 
    } 

und einfach die neuen Zeilen in die Datei als

if(value != search) { 
     Logger.log(data[i][3]); 
     ss.getSheetByName("All Data").appendRow(data[i]); 
     } 

Viel Glück hinzufügen =)

+0

Ich versuchte, die = Version, aber ich fühle mich wie ich es an der falschen Stelle, weil ich die alten Daten wieder wiederholt werden immer. Vielen Dank! Ich werde all diese Vorschläge ausprobieren, wenn ich nach Hause komme! –

Verwandte Themen