Kennt sich einer mit Google Script gut aus?

Es gibt 27 Antworten in diesem Thema, welches 4.372 mal aufgerufen wurde. Der letzte Beitrag (9. Mai 2022 um 14:27) ist von wrglprmft.

  • Was mache ich falsch?

    Das Skript vergleicht jede MSN des einen Blattes mit jeder MSN des anderen Blattes und fügt dem ersten Blatt (bei bestimmten Bedingungen) eine neue Zeile hinzu. Sofern also z.B. für die erste MSN im ersten Blatt eine MSN mit passenden Bedingungen im zweiten Blatt existiert, bekommt das erste Blatt eine neue Zeile. Führt man das Skript nochmals aus, gibt es zu ersten MSN im ersten Blatt immer noch eine passende MSN im zweiten Blatt und es entsteht eine neue Zeile mit der zweiten MSN.

  • Das Skript vergleicht jede MSN des einen Blattes mit jeder MSN des anderen Blattes und fügt dem ersten Blatt (bei bestimmten Bedingungen) eine neue Zeile hinzu. Sofern also z.B. für die erste MSN im ersten Blatt eine MSN mit passenden Bedingungen im zweiten Blatt existiert, bekommt das erste Blatt eine neue Zeile.

    Ja, so soll es ja auch eigentlich sein.

    Führt man das Skript nochmals aus, gibt es zu ersten MSN im ersten Blatt immer noch eine passende MSN im zweiten Blatt und es entsteht eine neue Zeile mit der zweiten MSN.

    Ok, so ganz kapiert habe ich es nicht, aber warum ist das so und wie kann ich es besser machen?

  • Nehmen wir an im ersten Blatt stehen zunächst die MSN 1, 2, 3 und im zweiten 97,98,99. Dann wird ein erstmaliges Ausführen des Skriptes dazu führen, dass im ersten Blatt 1, 2, 3, 97, 98, 99, 97, 98, 99, 97, 98, 99 steht, denn 1 ist ungleich 97, also kommt die 97 hinzu, 1 ist ungleich 98, also kommt die 98 hinzu, 1 ist ungleich 99, also kommt die 99 hinzu, 2 ist ungleich 97, also kommt die 97 hinzu, 2 ist ungleich 98, also kommt die 98 hinzu, usw.

    Führt man das Skript ein weiteres Mal aus, so passiert genau dasselbe. Es hat sich ja an Blatt 2 nichts geändert.

    Ist die Anforderung vielleicht, dass jede MSN des zweiten Blattes, die nicht im ersten Blatt vorkommt, in das erste eingefügt wird? Dann wäre ein Vergleich ausgehend vom zweiten Blatt meine Wahl.

  • Ist die Anforderung vielleicht, dass jede MSN des zweiten Blattes, die nicht im ersten Blatt vorkommt, in das erste eingefügt wird? Dann wäre ein Vergleich ausgehend vom zweiten Blatt meine Wahl.

    Ja richtig, so soll es sein....

    Was muss ich dann ändern?

    for (x in Daten) {

    var MSN = Daten[x];

    erst nach der zweiten Schleife setzen?

    for (var i = 2; i <= RowQ; i++)

    ?????

  • Es sollten verschachtelte Schleifen bleiben, aber die innere wird zur äußeren. Außerdem muss die Bedingung zum Hinzufügen angepasst werden. Nur wenn das MSN des zweiten Blattes verschieden von allen MSN des ersten Blattes ist, soll hinzugefügt werden. Unten ein Skriptfragment in Pseudosyntax. Die Datumsprüfung könnte man noch vor die innere Schleife legen und die innere Schleife könnte man frühzeitig beenden, wenn ein Treffer gefunden wurde.

    Insgesamt ist das selbst für den Hausgebrauch nicht schön programmiert.

  • Ja, jetzt funktioniert es. Daaaaaanke!

    Ich musste nur in Zeile 21 eine Änderung machen:

    if (doAppend){

    da habe ich folgendes daraus gemacht:

    if (doAppend && DatumQ > StartDatum && DatumQ <= EndDatum){

    dann passt es.

    Ich hatte vorher schon viel rumprobiert und die Schleife

    for (x in Daten) {
    var MSN = Daten[x];

    auch schon nach der Schleife

    for (var i = 2; i <= RowQ; i++) {

    gesetzt.

    Hatte allerdings auch nichts gebracht.

    Der Bringer war hier deine Idee mit der Variablen doAppend

    Vielen Dank noch einmal

  • Dann solltest Du Dir die Bedingung

    Code
    if (MSN == MSNQ && DatumQ > StartDatum && DatumQ <= EndDatum){ 

    noch mal genauer anschauen. Hier hatte ich nämlich falsch negiert. Eigentlich sollte sie sagen: "Mach kein append, wenn die MSN gleich sind oder die MSN nicht gültig ist. Das habe ich aber versemmelt.

    Wenn Du die Datumsprüfung aber eh am Ende machst, sollte sie hier ganzweggelassen werden.