Alle Termine vom Google Kalender in Tabelle anzeigen

Hier in diesem Tutorial zeige ich Euch wie Ihr mit Hilfe der Script-Programmierung bei den Google Tabellen auf den Google Kalender zugreifen könnt um diese sogenannten Events also Termine als Liste dort anzuzeigen. Ich habe das ganze auch so programmiert dass man die Event-Farbe dort sehen kann und diesmal auch das Datum von der Uhrzeit separat ausgegeben wird. Ihr könnt das Script natürlich Euren Bedürfnissen entsprechend anpassen



 Wie bekomme ich die Kalender-ID vom Google Kalender?

In diesem Tutorial [Hier klicken] zeige ich Euch wie Ihr auf die Kalender-ID zugreifen könnt und wie Ihr auch einen Testkalender für Eure Versuche erstellen könnt.

Button erstellen

Einen Button für die Funktion könnt Ihr ganz einfach erstellen indem Ihr auf Einfügen – > Zeichnung eine einfache Zeichnung erstellt und nach dem Speichern auf das kleine schwarze Dreieck klickt was in der Zeichnung zu sehen ist. Hier könnt Ihr dem Bild ein Script zuweisen und das muss den gleichen Namen haben wie die Funktion also "AlleMeineTermine".

Hier das Script zum Kopieren

Wie immer geschieht die Benutzung von meinen Scripten auf eigene Gefahr 😉

Euch gefällt die Datei und Ihr wollt Euch unbedingt bedanken?
Hier ist meine AMAZON – Wunschliste [HIER KLICKEN] 😉

 

Das Video-Tutorial "Alle Termine vom Google Kalender als Liste"

 



Das könnte Dich auch interessieren

41 Kommentare

  1. Hallo Chris,

    ich habe, da mich obige Funktion für meine Homepage interessiert, den obigen Code eingebunden. Leider funktioniert er nicht, da ich folgende Google Fehlermeldung bekomme: "Autorisierung erforderlich – Unbenanntes Projekt needs your permission to access your Data on Google".
    Owohl ich die richtige ID benutze, der Kalender für die Öffentlichkeit freigegeben ist und ich die richtigen Anmeldedaten benutze, werden keine Daten angezeigt. Eine Wiederholung bringt die gleiche Meldung usw.

    Eine weitere Frage dazu. Falls es funktionieren sollte, will ich ein Auswahl der Monate ermöglichen, wobei die Anzahl der Tage in der Zukungt liegen soll.
    Ich möchte dazu n Kalender – wie Dinkelhausen, Feuerwehr, TSV u.a. in der Terminliste anzeigen. Unrer Excel 2013 habe ich schon so etwas realisert, aber kann keinen Google Kalender einbinden.

    Ich bin in der VBA Programmierung unter Excel seit 25 Jahren unterwegs, aber wollte mich an das Scripting unter Google Tabellen wagen. Durch Zufall bin ich auf diese Seite gestoßen und bin begeistert. Wenn ich auch noch weiß wie ich die Fehlermeldungen interpretieren soll, ist es wahrscheinlich das Tool für meine Homepage.

    Mfg

    Christoph

    Software:
    – Windows 10 Prof (Build 1709)
    – Firefox 57.0
    – Jimdo

    • Chris sagt:

      Hallo Christoph,
      die Prozedur für die Autorisierung hat sich seit der Erstellung des Tutorials ein bisschen geändert. Wenn sich das Fenster für die Autorisierung öffnet hast Du ganz unten im Fenster jetzt einen Link. Im Deutschen steht dort "Unbenanntes Projekt öffnen (unsicher)". Wenn Du dort rauf klickst solltest Du die Möglichkeit bekommen den Zugriff auf den Kalender zuzulassen.
      Ich benutze eigentlich immer Chrome als Browser weil ich da auch immer korrekt eingeloggt bin. Mit anderen Browsern habe ich das bisher noch nicht probiert außer wenn ich mal sehen wollte wie eine Tabelle in bestimmten Bereichen vor unberechtigten Zugriffen geschützt ist (also Zugriff ohne Berechtigungen auf dieser Tabelle).
      Wenn Du Dir schon einige Tutorials von mir angeschaut hast wirst Du ja bereits wissen dass ich nur Hobbyprogrammierer bin und kein Profi. Ich müsste mir also auch erst bestimmte Lösungen mühselig erarbeiten.
      Das Script sollte aber eigentlich auch die Daten der Zukunft auslesen können, da Du ja ein Start- und Enddatum eingeben kannst.
      Wenn Du schon viel mit VBA gearbeitet hast und dementsprechend weißt wie man programmiert werden Dir die Möglichkeiten mit der Google Script-Programmierung bestimmt gefallen.
      Schau mal im Scripteditor unter Hilfe und dann API Referenz. Dort findest Du jede Menge Methoden und teilweise auch kleine Beispiele. Da kannst Du Dir schon mal einen kleinen Überblick verschaffen.
      Macht auf jeden Fall viel Spaß wenn man die nötige Zeit dafür hat 😉

      Viele Grüße
      Chris

  2. Dj sagt:

    Hallo Christoph,
    klasse Hilfe. Vielen Dank.
    Hättest Du eine Idee, wie ich folgendes hin bekomme?
    Und zwar würde ich gerne in der Liste noch die Monate anzeigen lassen. Also, die Termine werden ja untereinander angezeigt und ich würde gerne, dass er in der ersten Spalte entweder die Farbe anzeigt und wenn sich ein Monat verändert, in Fett und Schriftgröße 11 der Monatsname.
    So würde dann
    Januar
    Termin
    Termin

    Februar
    Termin
    Termin

    dort stehen.
    Das fände ich super.
    Ich würde mich echt freuen, wenn Du hierzu eine Idee hast. Normal müßte man ja irgendwie den Monat aus dem Starttermin raus bekommen und sagen auch eine Array machen var Monate=["Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober,"November","Dezember"];
    Und dann müßte man hingehen und sagen, Wenn Monat sich verändert, zeige einmal Monat an oder so.
    Aber ich hab keine Idee, wie man das machen könnte.

    Ich habe bzgl. der Farben übrigens eine Seite gefunden, die alle ID zu den Kalenderfarben definiert. https://developers.google.com/apps-script/reference/calendar/event-color
    Habe Deinen Code dementsprechend angepasst.
    var bgColors=["#ffffff","#a4bdfc","#7ae7bf","#bdadff","#ff887c","#fbd75b","#ffb878","#46d6db","#e1e1e1","#5484ed","#51b749","#dc2127"];
    #fffff weil es ID 0 nicht gibt.

    Lieben Gruss
    DJ

    • Chris sagt:

      Hi DJ, für die Anpassung des Scripts fehlt mir momentan leider die Zeit aber normalerweise dürfte das kein Problem sein. Du hast ja das Startdatum und das Enddatum. Du könntest also das ganze über eine Schleife laufen lassen und anstatt einen größeren Bereich genau nur einen Monat angeben.
      Ich würde das vermutlich in eine eigene Funktion packen und nur das Jahr und den Monat als Parameter übergeben. Das Script was Du dann aufrufst enthält dann nur einen bestimmten Zeitraum und von dort aus wird die andere also große Funktion wie im Beispiel dann eventuell mehrfach aufgerufen. Immer mit anderen Parametern (Jahr und Monat).
      Das mit den Monatsnamen kannst Du dann natürlich auch über ein Array lösen. Wenn Du hier den Monat als Zahl übergibst dann kannst Du Dein Array entsprechend auslesen. Allerdings musst Du dann noch -1 nehmen da die Arrays bei 0 anfangen.
      Das heißt beim Aufrufen der Funktion könntest Du auch schon direkt den Monatsnamen als erstes ausgeben und dann die Liste soweit es Einträge für den Monat gibt.
      Was den Starttermin und Endtermin angeht würde ich vermutlich folgendermaßen vorgehen. Ist jetzt aber nur meine vorgehensweise und es gibt sicher bessere Wege. Ich würde einfach den 1. des Monats nehmen und dann den 1. des übernächsten Monats -1 Tag. Allerdings müsste ich mir da auch erst einmal anschauen wie man das am besten lösen kann. Du weißt ja, wenn Du meine Tutorials gesehen hast, dass ich auch nur ein Anfänger bin und das ganze nur hobbymäßig mache weil es Spaß macht 😉
      Das mit den Farbnummern muss ich mir nochmal anschauen, ist aber ein guter Hinweis. Ich bin mir nicht sicher ob ich das so gewählt habe weil wie gesagt die Arrays bei 0 anfangen und nicht bei 1.
      Das ist vermutlich bei weitem nicht das was Du jetzt als Antwort erwartet hast, aber ich müsste mich auch erst einmal daran setzen und das ganze testen. Ist aber momentan zeitlich etwas schwierig.
      Viele Grüße
      Chris

  3. Marc sagt:

    Hallo Chris,

    vielen Dank für die Tutorials, die sind Top 🙂

    Ich habe mir soweit ein script gebastelt, was an sich funktioniert, ich jedoch noch ein Problem habe.

    In der ersten Tabelle" ist ein Kalender, dort Frage ich den Tag in einer Zelle ab und gebe dann das Ergebniss was in der Tabell2 gefunden ist aus

    Tabelle 1

    Spalte 1 | Spalte 2
    22/01/2018 | Ergebniss zum Datum aus Tabelle2

    Tabelle 1

    Spalte 1 | Spalte 2
    22/01/2018 | Termin XY

    Formel:
    =ARRAY_CONSTRAIN(ARRAYFORMULA(WENNFEHLER(INDEX(Uebersicht!$K$2:$K$309;KGRÖSSTE((Uebersicht!$J$2:$J$309=C5)*(ZEILE(Uebersicht!$J$2:$J$309)-1);ZÄHLENWENN(Uebersicht!$J$2:$J$309;C5)+1-ZEILE(Uebersicht!$A$1)));"")); 1; 1)

    C5= Das Datum z.b. 22/01/2018

    Das funktioniert auch soweit, aber nur wenn ich es genau so reinscheibe.

    In Tabelle 2 wird in Spalte 1 über google script mit dem Befehl:
    ss.getRange(i+startzeile,9).setValue(events2018[i].getStartTime()).setNumberFormat("dd/MM/yyyy");

    Das Datum ausgelesen. Sichtbar wird es auch richtig formatiert, jedoch schreibt er in der Zelle selbst

    22.01.2018 15:00:00

    und somit kann meine Formel den Eintrag nicht mehr finden.

    Kann ich nur das reine Datum irgendwie auslesen? mit get AllDay ist es das gleiche.

    Oder einfach, kannst du mir sagen wie ich die Formel oben so hinbekomme das er z.b. nur nach *22.01.2018* sucht?
    Hab scon alles probiert was ich gefunden habe :/

    • Chris sagt:

      Hast Du denn schon mal versucht auf diese Zelle die den Eintrag bekommt anschließend nur setNumberFormat ohne setValue anzuwenden um die Zelle selbst direkt auf dieses Format zu bringen?
      Wenn es nur am Format liegt sollte es eigentlich funktionieren.

    • Chris sagt:

      Warum Dir jetzt die Uhrzeit mit ausgegeben wird finde ich schon merkwürdig. Habe gerade selbst mal ein paar Sachen getestet aber sobald dort setNumberFormat angegeben wurde ist die Zelle auch entsprechend angezeigt worden (also auch ohne Uhrzeit, selbst wenn vorher eine eingetragen wurde oder über setValue eine gesetzt wurde). Das gleiche habe ich auch nochmal getestet wenn ich die Zellen manuell mit Uhrzeit formatiert habe. nach dem setNumberFormat wird genau das gesetzt was ich auch dort eingegeben habe. Also das nachträgliche setNumberFormat was ich vorhin angesprochen habe ist gar nicht notwendig. Musste ich aber auch erst nochmal testen. Wenn Du Dir die Videos von mir angeschaut hast weißt Du ja dass ich nur ein Hobbyprogrammierer bin 😉
      Wenn Du nur nach dem Datum suchen musst könntest Du das doch auch mit dem SVERWEIS machen (FILTER oder QUERY sollte auch funktionieren). Wenn Du viel mit Daten arbeitest und Daten oft filtern musst schau Dir mal ruhig die Funktion QUERY an. Du wirst begeistert sein.
      https://toptorials.com/funktion-query-wie-sql-google-tabellen/
      https://toptorials.com/importrange-query-kombiniert-google-tabellen/

      • Marc sagt:

        Wie gesagt, er zeigt mir offensichtlich ja nur das Datum an, sobald ich aber auf eine entsprechende Zelle gehe, steht dort das Datum inkl. Uhrzeit.
        Ist das bei dir auch so? 🙂
        Wenn nicht, wie lautet deine script Zeile dazu?

        • Chris sagt:

          Ich kann Dir sagen warum. Musste das aber selbst gerade erst mal wieder rauskramen, da die Datei ja schon was älter war. Du hast dort nicht nur das Datum sondern auch die Uhrzeit mit drin. Klar wusstest Du das schon aber jetzt schau Dir mal das Datum als Zahl an. Ein Tag entspricht intern eine 1 das heißt dass ganze Zahlen einen ganzen Tag entsprechen. Hast Du Uhrzeiten mit drin dann hast Du auch Nachkommastellen und genau diese sind der Grund warum Du Uhrzeiten mit angezeigt bekommst. Formatiere mal eine Zelle mit der Uhrzeit als normale Zahl, dann siehst Du was ich meine. Hier muss man jetzt das ganze noch RUNDEN damit ganze Zahlen heraus kommen.

  4. Bianka sagt:

    Hallo,
    ich bin begeister, vielen lieben Dank, das hilft mir sehr weiter.
    Gerne würde ich noch den Ort mit einfügen.
    Weißt du wie das geht und könntest du mir das zeigen ?
    Vielen lieben Dank

    • Chris sagt:

      Hi Bianka,
      das Script ist schon so aufgebaut dass Du in Spalte "H" die Adresse angezeigt bekommst sobald im Kalender ein Ort hinzugefügt wird.
      Viele Grüße
      Chris

  5. Bjoern sagt:

    Hey Chris,
    ich bekomme immer wieder die Anzeige "Skript nicht verifiziert"
    Was kann ich machen?

    • Chris sagt:

      Wenn Du das Script das erste mal im Script-Editor startest, bekommst Du eine Meldung (kleines Fenster). Hier musst Du angeben dass dieses Script die Erlaubnis hat auf bestimmte Bereiche zuzugreifen. Welche Bereiche das sind wird Dir ebenfalls dort angezeigt. Leider ist das mit dem Genehmigen in diesem Dialogfenster immer sehr versteckt und ziemlich weit unten, aber in den Tutorials zeige ich den Vorgang meistens. Nachdem Du die Berechtigungen ausgeführt hast werden die Daten geladen.

  6. Benny sagt:

    Hallo,

    bei ganztägigen Terminen wird immer wird immer das Enddatum als Folgetag 0:00 Uhr angegeben.
    Das ist leider sehr verwirrend. Kann man das Script so anpassen, dass es bei dem eigentlichen Tag bleibt und dann vielleicht 23:59 Uhr angibt? Die Uhrzeit muss nicht sein. Wichtig ist jedoch, dass der Endtag auch der tatsächliche Endtag ist.

    Wäre super, wenn das geht.

    Viele Grüße und danke für die tolle bisherige Hilfe!
    Benny

  7. Thomas sagt:

    Hallo Chris !

    Ich bin sehr interessiert an der Möglichkeit, den Google Kalender auszulesen und in
    meine Excel – Tabelle einzubauen.
    Leider habe ich ein grundsätzliches Problem, dass deine Scripts (da Java – Script)
    in meinem Standard – Excel (2016) nicht laufen.
    Offensichtlich benötige ich irgendeine Art von Plugin, Erweiterung etc.
    Könntest Du mir da bitte behilflich sein, eine Google Suche hat mir nicht wirklich weiter
    geholfen.

    cu Thomas

  8. Marion Stoll sagt:

    Hallo Chris, das ist ein super Tutorial. Genau das, was ich gesucht habe. Nur stoße ich auf ein Problem, das ich selber – mangels Kenntnisse – nicht lösen kann: bei ganztägigen Terminen wird das Enddatum mit dem nächsten Tag angegeben, sprich wenn ein Termin von 3.-5.12.18 dauert und als ganztägiges Ereignis im Google-Kalender eingetragen ist, erhalte ich in der Tabelle als Startdatum 3.12.18 und als Enddatum 6.12.18. Gibt es dafür eine einfache Lösung? Danke!

    • Chris sagt:

      Hallo Marion,
      ich habe mir das Script gerade nochmal angeschaut und es ist so aufgebaut das die Daten direkt vom Kalender bezogen werden. Das Script selbst ändert keine Daten. Normalerweise müsste es auf Deinem Kalender eigentlich dann genauso aussehen.
      events[i].getStartTime()).setNumberFormat("dd.MM.yyyy");
      events[i].getStartTime()).setNumberFormat("hh:mm:ss");
      events[i].getEndTime()).setNumberFormat("dd.MM.yyyy");
      events[i].getEndTime()).setNumberFormat("hh:mm:ss");
      Diese Funktionen holen die Daten direkt ab und ändern dabei nur das Format (Tag, Monat, Jahr / Stunde, Minute, Sekunde) damit es in verschiedenen Zellen steht. Dabei werden aber keine Änderungen des Datums oder der Zeit vorgenommen.
      Viele Grüße
      Chris

      • Marion sagt:

        Hallo Chris,
        vielen Dank für deine schnelle Antwort. Ich hatte wohl vermutet, dass meine erste Frage nicht weggegangen ist, daher meine zweite Nachricht… 😉
        Ich habe das Script, das ich verwende, nochmals kontrolliert. Und es ist genau so, wie du es geschrieben hast. E scheint so zu sein, dass bei ganztägigen Terminen der letzte Tag um 24:00 Uhr aufhört und dies beim Auslesen als 0:00 des Folgetages gewertet wird. Siehst du eine Möglichkeit, wie man das im Script lösen könnte? Nachdem ich in dem betreffenden Kalender nur Ganztagestermine drinnen habe, wäre es auch denkbar, dies im Skript so zu lösen, dass man am Endtag einfach einen Tag abzieht. Hättest du eventuell dafür eine Idee? Vielen, vielen Dank nochmals! Bin ganz begeistert, dass ich auf diese Seite gestoßen bin.
        Marion

        • Chris sagt:

          Hallo Marion,
          leider fehlt mir dafür die Zeit mich näher damit zu beschäftigen weil das auch sehr speziell ist. Ich habe mir gerade angeschaut wie die Daten aussehen die über den Kalender verschickt werden. Die sehen in etwa so aus:
          [18-12-22 12:56:05:497 CET] Sat Nov 20 09:30:00 GMT+01:00 1999
          Bei mir in der Tabelle werden auch ganztägige Termine in nur einer Zeile angezeigt.
          Eventuell kannst Du Dir aber auch schon damit helfen wenn Du ganztägige Termine über die bedingte Formatierung markierst.
          Die Formel könnte dann in etwa so aussehen:
          =WENN(UND(VERKETTEN(STUNDE($E5);minute($E5);SEKUNDE($E5))=VERKETTEN(STUNDE($G5);minute($G5);SEKUNDE($G5));ISTZAHL($G5));1;0)
          Es werden alle Termine gekennzeichnet wo die Stunden, Minuten und Sekunden gleich sind. Das heißt einmal die ganztägigen Termine und Termine wo die Anfangs und Endzeit gleich sind.
          Wichtig ist den ganzen Bereich zu markieren der die bedingte Formatierung erhalten soll.
          Viele Grüße und schöne Feiertage
          Chris

          • Marion sagt:

            Hallo Chris,
            vielen Dank jedenfalls, dass du dich nochmals in mein Problem hineingedacht hast, und für die Anregungen einer möglichen Lösung. Ich werde mich damit ein wenig spielen. Danke auch nochmals für die tolle Seite. Ebenfalls schöne Feiertage!
            Marion

          • Chris sagt:

            Hallo Marion, ja versuche das mal. Vielleicht findest Du ja noch eine ganz andere Lösung für dieses Problem. Wenn ja, würde ich mich natürlich über Feedback freuen.
            Viele Grüße
            Chris

  9. Marion sagt:

    Hallo Chris, vielen Dank für die tolle Anleitung. Habe es auch auf Anhieb geschafft. Was mir auffällt und wofür ich keine Lösung finde, ist folgendes Problem: bei ganztägigen Terminen wird das Enddatum mit dem Tag nachher bezeichnet: also zum Beispiel bei einem ganztägigen Event, das am 20.12.18 endet, wird der 21.12.18 ausgelesen. Gibt es eine einfache Möglichkeit, das anders zu machen? Danke und Grüße! Marion

    • Chris sagt:

      Hi Marion,
      ich habe gerade auf Deinen anderen Kommentar geantwortet. Beim ersten Mal muss ich einen Kommentar erst freischalten bevor er hier gezeigt wird. Da ich an sehr vielen Projekten arbeite kann die Antwort schon mal etwas länger dauern 😉
      Viele Grüße
      Chris

  10. Mercedes sagt:

    Hallo Chris,

    finde deine Videos super !!!

    Wollte das Script übernehmen, aber er spuckt mir immer einen Fehler raus :

    TypeError: Methode "getEvents" von null kann nicht aufgerufen werden. (Zeile 13, Datei "Code")

    Was kann ich tun ?

    Liebe Grüße
    Mercedes

    • Chris sagt:

      Überprüfe bitte nochmal die Kalender ID. Ich gehe stark davon aus dass diese nicht richtig geschrieben wurde oder gar nicht existiert.
      var events=CalendarApp.getCalendarById("2sfep7arna6opratj1i6lk5is@group.calendar.google.com").getEvents(startZeitpunkt, endZeitpunkt);
      Hier musst Du Deine eigene Kalender ID eintragen. Die findest Du wie im Video beschrieben.
      Schöne Feiertage 🙂
      Viele Grüße
      Chris

  11. Pixel sagt:

    Grüsse.
    ich hab mal ne frage zu den Eventfarben. wo kann ich die denn im google Kalender einstellen ?
    Mit freundlichen Grüßen und schöne Weihnachten

    • Chris sagt:

      Wenn Du einen Termin einträgst dann siehst Du unten den Punkt "Weitere Optionen".
      Wenn Du dort rauf geklickt hast, dann erscheint auf der linken Seite die Möglichkeit der Farbanpassung rechts neben der Auswahl in welchen Kalender der Termin eingetragen werden soll (unter dem Punkt Benachrichtigung hinzufügen).
      Viele Grüße und schöne Feiertage für Dich
      Chris

  12. Pixel sagt:

    Danke Danke ich wünsch das selbe.
    Also ich hab jetzt alles Probiert was an Farben verfügbar ist , neue Termine erstellt mit unterschiedlichen Farben.
    aber es wird keine Farbe im Farbfeld angezeigt

    • Chris sagt:

      Dann habe ich Dich vermutlich falsch verstanden. Also im Kalender werden diese Ereignisse entsprechend den Farben bei mir angezeigt.
      Du kannst diese übrigens auch mit der rechten Maustaste direkt anklicken und die Farbe auswählen.
      Im Script selbst kannst Du die Farben ebenfalls ändern. Allerdings musst Du dann schauen welche Einträge Du dafür genau nehmen musst weil das für viele etwas schwer nachzuvollziehen ist.
      Um das zu vereinfachen kannst Du mal hier schauen:
      https://html-color-codes.info/webfarben_hexcodes/

  13. Erich sagt:

    Hallo Chris,
    ich hatte dich im April 2017 schon mal kontaktiert bzgl. der Möglichkeit, dieses Script dahingehend zu erweitern, dass daraus eine Jahresübersicht wird.
    Zitat: "Hi Erich, klar kannst Du das auch per Copy & Paste machen aber ich hatte eine Anfrage bekommen wie man halt Tabelle und Kalender verbinden kann. So ist dann halt dieses Tutorial entstanden.
    Ich denke mit der Script-Programmierung kann man schon eine ganze Menge bewerkstelligen. Das mit der Jahresübersicht ist eine interessante Idee. Ich schreibe mir das gleich mal auf die TODO – Liste und versuche ein Tutorial daraus zu machen. Ich denke das könnte sicher mehrere hier interessieren. Wird aber etwas…"
    Leider sind meine Scriptkenntnisse nicht ausreichend, um so etwas selbst zu realisieren, zumindest nicht in vollem Umfang. Jetzt bin ich gerade zufällig wieder darauf gestoßen und wollte mal fragen, ob du Zeit hattest, dich mal näher damit zu befassen. Im Google-Kalender gibt es ja eine Monatsübersicht, die zwar schon etwas in diese Richtung tendiert, aber immer noch zu unübersichtlich ist. Was in deinem Script auch nicht vorhanden ist, wenn ich es richtig verstehe, ist die Option, Termine aus mehreren (freigegebenen) Kalendern in eine Tabelle zu übernehmen. Mir würde dazu auch nur die Kalenderfarbe genügen und eine Darstellung analog zu der Google-Monatsübersicht eine Jahresübersicht mit sechs Zeilen à zwei Monaten.

    • Chris sagt:

      Hallo Erich,
      bisher bin ich noch nicht dazu gekommen und es sieht auch sehr schwierig aus. Seit Anfang des Jahres hat sich die Anzahl der Anfragen (mehrere Webseiten und YouTube Channels) extrem erhöht. Wenn Du auf meinen YouTube Kanal schaust dann siehst Du ein Video was es ein wenig erklärt:
      Bitte um Verständnis
      Wenn Du mehrere Kalender abfragen möchtest um diese in die Tabelle zu bekommen musst Du diese auch separat ansprechen da jeder Kalender seine eigene ID hat.
      Du könntest dieses Script eigentlich 2 mal benutzen oder öfters.
      Meine Idee dazu wäre folgende. Du kannst für jeden Kalender eine eigene Tabelle erstellen. Du musst im Script nur den Namen der Tabellen entsprechend anpassen. Also anstatt "AlleMeineTermine" benutz Du zum Beispiel für jede Tabelle den Namen des Kalenders. Du hast also jetzt 2 Scripte und 2 Tabellen wo jedes Script auf einen anderen Kalender und auf eine andere Tabelle zugreift. Damit hast Du erst einmal schon eine eigene Übersicht für jeden Kalender.
      Als nächstes erstellst Du Dir eine Tabelle Namens Jahreskalender oder AlleKalender oder was Du bevorzugst.
      Anschließend könntest Du Dir untereinander in diesem Jahreskalender die Tage eintragen. Also für mein Beispiel in Zelle B1 01.01.2018, Zelle B2 02.01.2018 und so weiter.
      Jetzt kannst Du über Vergleich und Index die Kalender abfragen. Dazu könntest Du Dir für jede Spalte rechts neben dem Datum einen Kalender aussuchen. Der erste Kalender steht dann in Spalte C der zweite Kalender in Spalte D und Du könntest noch sehr viel mehr Kalender dort einbauen. Als Formel kannst Du dann zum Beispiel so etwas benutzen:
      =WENN(ISTZAHL(VERGLEICH(B1;AlleMeineTermine!D:D;0));INDEX(AlleMeineTermine!C:C;(VERGLEICH(B1;AlleMeineTermine!D:D;0)));"")
      Die Formel kopierst Du Dir ganz oben in Zelle C1 und kopierst diese dann nach unten. Sollten Deine Datumsangaben woanders sein musst Du die Formel natürlich noch anpassen.
      Ich verwende hier noch den alten Kalendernamen. Du musst Deine eigenen Namen für jede Spalte benutzen.
      Das sollte funktionieren.
      Viele Grüße
      Chris

      • Erich Kluiber sagt:

        Hallo Chris,
        vielen Dank für die schnelle Antwort!
        Ich hatte schon vermutet, dass die verschiedenen Kalender wegen der unterschiedlichen ID´s einzeln abgefragt werden müssen. Ich hatte es mir mit meinem laienhaften Wissen halt so vorgestellt, dass man die Kalender vielleicht mit einer for-Schleife nacheinander abfragen könnte.
        Es wäre aber auch kein Problem, mehrere Makros mit den jeweiligen ID´s zu erstellen und sie dann einzeln zu starten.
        Mehrere Tabellen brauche ich m. E. nicht, da ich die jeweiligen Kalendertermine in eigene Zeilen/Zellen eintragen möchte, die ich vorher mit Namen versehen habe.
        Ich möchte auch nicht die Termindaten (Datum, Uhrzeit) von Start und Ende übernehmen, sondern diese Werte (nur Datum) zum Einfärben von den entsprechenden Zellen in der Farbe des Kalenders verwenden.
        Beispiel:
        Ein Termin im Kalender A (Farbe blau) beginnt am 5.1.2019 und endet am 16.1.2019.
        In der Tabelle gibt es mehrere Zeilen für je einen Kalender. In jeder Zeile steht in der ersten Spalte der Kalendername und in die folgenden Zellen in dieser Zeile sind die einzelnen Zellen mit "KalenderA_0101 KalenderA_0201" usw für einen bzw. zwei Monate benannt.
        Nun soll das Makro also die Zellen "KalenderA_0501" bis "KalenderA_1601" in der Kalenderfarbe einfärben.
        Leider weiß ich nicht, ob so etwas überhaupt möglich ist und wenn ja, schon garnicht wie.
        Vielleicht kannst du mir da helfen?

        • Chris sagt:

          Hallo Erich,
          in der Funktion selbst liest Du mit der Zeile:
          var events=CalendarApp.getCalendarById("DEINE_KALENDER_ID").getEvents(startZeitpunkt, endZeitpunkt);
          schon alle Daten aus, dass heißt hier stecken schon alle Daten in dem Array "events". Eine Schleife benötigst Du nur für das eintragen in den Kalender.
          Da aber schon alle Einträge in einem Array stehen und die Größe des Arrays über events.length bestimmt werden kann benötigst Du keine weitere Schleife sondern rufst jeden Kalender nur einmal mit so einer Zeile ab.
          Du kannst natürlich auch für jedes Datum auf den Kalender zugreifen und abfragen aber das wäre ein Performance-Killer.
          Mit einem Makro wirst Du da nicht weit kommen es sei denn Du würdest dass Makro anschließend weiter im Script bearbeiten.
          Leider fehlt mir die Zeit mich näher damit zu beschäftigen zumal das auch sehr speziell ist. Du hast ja jetzt sicher das Video gesehen 😉
          1 Kommentar mit dem selben Inhalt reicht übrigens. Ich habe die anderen beiden jetzt entfernt.
          Viele Grüße
          Chris

          • Erich Kluiber sagt:

            Hallo Chris,
            sorry, wenn ich dich jetzt nochmal belästige aber nachdem ich mir die Funktion nochmal genau durch den Kopf gehen ließ, habe ich endlich begriffen, dass sie nur Termine aus einer Kalender-ID in ein bestimmtes Tabellenblatt schreiben kann und zwar zeilenweise untereinander.
            Würde das auch spaltenweise gehen mit einem Zähler oder irgendwas, das die terminfreien Tage als leere Zellen überspringt oder konkret anhand eines übergebenen Wertes (Datum) eine bestimmte Zelle anspringt, die dem Datum entspricht?
            So, das war´s jetzt.
            Die dreifache Eingabe kam übrigens daher, dass mein Browser meine Antwort auch nach mehrmaligem Aktualisieren der Seite nicht angezeigt hatte. Da dachte ich, irgendwas hätte nicht funktioniert.

          • Chris sagt:

            Du kannst die Daten auch nebeneinander ausgeben. Dafür musst Du nur die Einträge von getRange vertauschen. Ich würde Dir dennoch weiterhin empfehlen die Daten in einer separaten Tabelle abzurufen und dann über vergleich und Index das ganze aus dieser Tabelle zu holen. Der andere Weg wäre etwas komplizierter, weil Du den Bereich wo die Daten eingetragen werden sollen ebenfalls als Array auslesen müsstest (Datumsbereich), anschließend dieses Array durchlaufen und dabei das Array mit den Kalenderdaten vergleichen müsstest und die Übereinstimmungen dann an der richtigen Position ausgeben.
            Das mit dem Script ist natürlich eine gute Möglichkeit für Dich weiter in die Materie einzusteigen und vielleicht sogar mehrere Kalender sowie Termine herauszuziehen und in die Tabelle korrekt einzutragen. Die Schleife wird dann das Array mit dem Datumsbereich der Zieltabelle sein und die anderen Arrays der verschiedenen Kalender werden dann verglichen. Jeder Durchlauf wird gezählt und bestimmt damit auch die Position für den korrekten Eintrag.
            Viele Grüße
            Chris

          • Erich Kluiber sagt:

            Vielen Dank,
            ich werde mein Glück mal versuchen.
            Gruß und frohes Schaffen im Neuen Jahr
            Erich

          • Chris sagt:

            Das wünsche ich Dir auch. Vielen Dank.
            Chris

  14. pixel sagt:

    grüsse.
    habe folgendes problem… wenn ich einen ganztägigen Termin im Kalender eintrage z.b Anfang 7.01.2019- ende 08.01.2019 erscheint in der Tabelle als Enddatum der 09.01.2019 ?
    woran liegt das ?
    Mit freundlichen Grüßen

    • Chris sagt:

      Im Kalender wird das vermutlich genauso stehen. Der Termin geht dann bis um 09.01.2019 um 00:00 Uhr. Das Script liest nur aus was aus dem Kalender kommt und benutzt die eingetragenen Start und Endzeiten.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.