Beispiel einer doppelten FOR Schleife
In diesem Beitrag zeige ich Euch ein Beispiel einer doppelten FOR Schleife einen Stundenplan auslese und die Daten daneben als Liste wieder ausgebe. Wer jetzt das erste mal ein Google Tabellen Script programmiert, sollte sich zuerst dieses Tutorial hier anschauen: Mein erstes Google Tabellen Script programmieren
Es gibt natĂŒrlich noch weitere Schleifen falls Ihr Euch dafĂŒr interessiert:Â Ăbersicht der SCHLEIFEN (Google Tabellen Script) Snippet
Dieser Beitrag entstand aufgrund einer netten Anfrage. Hier war die Aufgabenstellung dass die Daten spĂ€ter vom typischen Stundenplan in den Google Kalender ĂŒbertragen werden können. Dies ist sozusagen eine Zwischenlösung die aber entsprechend angepasst werden könnte. Der Stundenplan wurde mir als Vorlage zur VerfĂŒgung gestellt. Ich habe ihn nur um eine Leerzeile und in der Formatierung ein wenig geĂ€ndert.
Der Kalender hat den folgenden Aufbau.
Zu beachten ist, das das Datum in der zweiten Spalte steht und die Anfangs und Endzeiten des Stundenplans in Zeile 2 und 3 stehen.
Das wurde in dem Script alles berĂŒcksichtigt und kann noch ein wenig angepasst werden.
Die unformatierte Ausgabe sieht folgendermaĂen aus:
Hier mĂŒsst Ihr nur noch die Spalten entsprechen formatieren damit alles ein wenig chick aussieht. Also einfach die Spalte vom Datum auswĂ€hlen und dann auf FORMAT – > ZAHL – > DATUM gehen und schon passt es. Man könnte das zwar auch direkt im Script formatieren aber ich denke dann wĂŒrde sich die AusfĂŒhrungszeit noch einmal erhöhen. Nach ein bisschen Formatierung sieht es dann folgendermaĂen aus.
Das Problem:
Bei Abfragen die lĂ€nger dauern, kann es zu einem Abbruch kommen, da die Scripte von Google-Tabellen eine begrenzte AusfĂŒhrungszeit haben. Sollte das Script in dieser Zeit nicht ausgefĂŒhrt worden sein bricht das Script mit der Fehlermeldung "Maximale AusfĂŒhrungszeit ĂŒberschritten" ab.
Hier könnte man eventuell das ganze in kleinere HĂ€ppchen aufteilen. Bei mir brach das Script nach ca. 250 EintrĂ€gen ab. Bei diesen Stundenplan lief das vom 1. Januar bis fast Ende MĂ€rz durch. Wenn jemand Ideen hat die AusfĂŒhrungszeit zu erhöhen (ohne die Anzahl der EintrĂ€ge zu verringern, was natĂŒrlich auch geht), kann das gerne in die Kommentare schreiben. Ich habe noch nicht probiert ob z.B. eine While-Schleife schneller durchlaufen wird.
Die Lösung:
Man könnte den ganzen Bereich in ein Array-Objekt packen und dann dieses Array durchlaufen um Werte zu vergleichen, zu filtern oder sonstiges. Ein Beispiel wie man solch ein Array durchlaufen kann findet Ihr hier: https://developers.google.com/apps-script/articles/removing_duplicates
Die Ăbungs-Vorlage fĂŒr den Stundenplan könnt Ihr Euch hier herunterladen:
Diese Datei mĂŒsst Ihr nur entzippen und könnt es dann ĂŒber Datei – Importieren in GOOGLE Tabellen importieren.
DownloadEuch gefÀllt die Datei und Ihr wollt Euch unbedingt bedanken?
Hier ist meine AMAZON – Wunschliste [HIER KLICKEN] đ
Das Script Beispiel einer doppelten FOR Schleife zum kopieren.
function kalenderCSV(){ var tabellenBlatt=SpreadsheetApp.getActiveSpreadsheet(); // Anzahl der Zeilen die ausgelesen werden sollen. var startZeile=5; var stopZeile=tabellenBlatt.getLastRow(); //var stopZeile=10; // zum Testen nur 10 Zeilen // Spaltenbereich der durchsucht werden soll var startSpalte=3; var stopSpalte=17; // Die Zeile in der sich die Anfangszeit befindet var anfangsZeitZeile=2; // Die Zeile in der sich die Endzeit befindet var endZeitZeile=3; // Die Spalte in der sich das Datum befindet var datumSpalte=2; // Abstand zwischen der Tabelle und der Ausgabe der Liste var abstandTabelleListe=2 // Titelzeile var titelZeile=startZeile-1; // Bereich vor der Ausgabe löschen tabellenBlatt.getActiveSheet().getRange(startZeile,(stopSpalte+abstandTabelleListe),(stopSpalte*stopZeile),6).clear(); // Eintragen der Ăberschriften tabellenBlatt.getRange("R"+(titelZeile)+"C"+(stopSpalte+abstandTabelleListe)).setValue("Eintrag-Nr.:"); tabellenBlatt.getRange("R"+(titelZeile)+"C"+(stopSpalte+abstandTabelleListe+1)).setValue("Zeile:"); tabellenBlatt.getRange("R"+(titelZeile)+"C"+(stopSpalte+abstandTabelleListe+2)).setValue("Datum"); tabellenBlatt.getRange("R"+(titelZeile)+"C"+(stopSpalte+abstandTabelleListe+3)).setValue("Uhrzeit-Start"); tabellenBlatt.getRange("R"+(titelZeile)+"C"+(stopSpalte+abstandTabelleListe+4)).setValue("Uhrzeit-Ende"); tabellenBlatt.getRange("R"+(titelZeile)+"C"+(stopSpalte+abstandTabelleListe+5)).setValue("Zellen-Eintrag"); var counter=0; for(var zeile=startZeile; zeile<=stopZeile; zeile++){ for(var spalte=startSpalte; spalte<=stopSpalte; spalte++){ var zellenEintrag=tabellenBlatt.getRange("R"+zeile+"C"+spalte).getValue(); if(zellenEintrag=="") continue; var datumVomEintrag=tabellenBlatt.getRange("B"+zeile).getValue(); var anfagszeitVomEintrag=tabellenBlatt.getRange("R"+anfangsZeitZeile+"C"+spalte).getValue(); var endzeitVomEintrag=tabellenBlatt.getRange("R"+endZeitZeile+"C"+spalte).getValue(); tabellenBlatt.getRange("R"+(counter+startZeile)+"C"+(stopSpalte+abstandTabelleListe)).setValue(counter+1); tabellenBlatt.getRange("R"+(counter+startZeile)+"C"+(stopSpalte+abstandTabelleListe+1)).setValue(zeile); tabellenBlatt.getRange("R"+(counter+startZeile)+"C"+(stopSpalte+abstandTabelleListe+2)).setValue(datumVomEintrag); tabellenBlatt.getRange("R"+(counter+startZeile)+"C"+(stopSpalte+abstandTabelleListe+3)).setValue(anfagszeitVomEintrag); tabellenBlatt.getRange("R"+(counter+startZeile)+"C"+(stopSpalte+abstandTabelleListe+4)).setValue(endzeitVomEintrag); tabellenBlatt.getRange("R"+(counter+startZeile)+"C"+(stopSpalte+abstandTabelleListe+5)).setValue(zellenEintrag); counter++; } } }
Die Verwendung von diesem Script geschieht wie immer auf eigene Gefahr.
Euch gefÀllt die Datei und Ihr wollt Euch unbedingt bedanken?
Hier ist meine AMAZON – Wunschliste [HIER KLICKEN] đ