Kalender mit Tabelle verbinden / verknüpfen (Google Tabellen Script)

Kalender mit Tabelle verbinden (Google Tabellen Script)

In diesem Tutorial zeige ich Euch wie Ihr Euren Google Kalender mit einer Google Tabelle / Spreadsheets verbinden könnt. Es gibt noch ein weiteres Tutorial welches für Euch interessant sein könnte. Hier werden alle Termine vom Kalender in der Tabelle angezeigt abhängig davon welches Start und Enddatum Ihr eingebt: Alle Termine vom Google Kalender in Tabelle anzeigen



Das Script könnt Ihr hier kopieren und die Funktion dann über den Script-Editor einfügen. Um auf den Kalender zugreifen zu können braucht Ihr die noch die entsprechende ID.
Wie das alles funktioniert zeige ich in dem Video unten.

Das Script zum Kopieren

Wie immer ist die Benutzung des Scripts auf eigene Gefahr.

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

Reihenfolge umdrehen

Wer die Auflistung der Einträge umdrehen möchte kann ja mal die nachfolgende FOR – Schleife verwenden. Damit werden die neueren Einträge zuerst gezeigt.
Dafür müsst Ihr die FOR – Schleife nur austauschen . Die Zeile mit var zeile=1; müsst Ihr dann, wie in den Codezeilen zu sehen noch davor setzen.

 Das Video – Tutorial "Google Kalender mit Tabelle verbinden"

 



Ähnliche Beiträge

33 Kommentare

  1. Alexander Pitscheider sagt:

    Ich bin neben meinem Studium Sicherheitsbeamter und habe eine Excel-Tabelle (mittlerweile Google Tabellen) um mir meine Stunden aufzuschreiben.
    Mein Ziel war es, die Einträge aus der Tabelle, direkt in meinen Kalender einzutragen.
    Er erkennt jetzt aber nicht mein Datum als Date an sondern nur als String wenn ich es aus der Tabelle auslese.

    Mein Code:
    function myCalendar(){

    var ss=SpreadsheetApp.getActiveSpreadsheet().getSheetByName("termine");
    var title;
    var startTime;
    var endTime;
    //var descrip;
    var ort;
    var events=CalendarApp.getCalendarById("ID-meinesKalenders");

    for (var i=0;i<ss.getLastRow();i++) {
    title=ss.getRange(i+1, 1).getValue();
    startTime=ss.getRange(i+1, 3).getValue();
    endTime=ss.getRange(i+1, 4).getValue();
    ort=ss.getRange(i+1, 2).getValue();
    events.createEvent(title, startTime, endTime,{location: ort});
    }

    }

    So wie ich das verstanden habe, sollte die getValue() ein Objekt zurückgeben.Er schreibt es mir zwar richtig in den Kalender gibt aber trotzdem den Fehler aus: "Methode createEvent(string,string,string,object) nicht gefunden (Zeile 16, Datei "Tabelle_in_Calendar")"
    Wie kann ich dir die Tabellen dazuschicken? Ich glaube dass es indirekt mit der Formatierung in der Tabelle Diskrepanzen gibt.
    Mein Problem ist, dass ich in der Tabelle ein ARRAYFORMULA(..) aus zwei Zellen einer anderen Tabelle aufrufe und die irgendwie öfters Zellenformat ändert (Automatisch, ReinerText, Date/Time…).

    LG Alex

    • Chris sagt:

      Hi Alex, sieht so aus als liegt es wirklich an den Datumseinträgen. Normal muss hier das ganze so aussehen:

      createEvent(Titel, StartZeit, EndZeit, options)
      createEvent(String, Date, Date, Object)

      Du übergibst laut Fehlermeldung statt den Date – Objekten eine normale Zeichenkette also Strings
      Als Beispiel – Script sieht das ganze so aus:

      var event = CalendarApp.getDefaultCalendar().createEvent('Mein Titel',
      new Date('July 15, 2017 20:00:00 UTC'),
      new Date('July 15, 2017 21:00:00 UTC'),
      {location: 'Mein Ort'});

      Du müsstest mal über

      Logger.log('MEINE VARIABLE 1': + DeineVariable);

      Die Daten auslesen damit Du siehst was da genau übergeben wird.
      Vielleicht kannst Du Deine eigenen Zeitangaben, also die Strings in die new Date aufrufe integrieren. aber darauf achten das hier UTC eventuell noch geändert werden muss
      Schau Dir mal diese Seite an:
      https://developers.google.com/adwords/scripts/docs/features/dates
      Hier ist der Abschnitt "Datumsobjekt auf der Grundlage eines formatierten Datumsstrings erstellen" interessant.

      Viele Grüße
      Chris

  2. Alexander Pitscheider sagt:

    Hallo Crhis,

    danke für die schnelle Rückmeldung, ich war ein paar Tage weg.
    Mit dem <> aus dem Link
    hat alles super funktioniert.
    Danke vielmals.

    LG
    Alex

    • Dennis sagt:

      Servus Alexander,

      kannst du bitte dein fertiges Script hier posten? Ich habe das Selbe vor wie du, bin aber im Coden (?) eine absolute Null.
      Grüße

  3. Steffi sagt:

    Hallo Chris,

    vielen Dank für dieses Tutorial. Ist es auch andersherum möglich? Ich benötige Infos aus dem googlesheet angezeigt im Googlekalender.

    Wir würde das funktionieren oder hast du dafür auch schon ein Tutorial?

    LG

    Steffi

  4. Soxbomb sagt:

    Hi Chris, ist es auch möglich das ganze zu Automatisieren? er updatet den Kalender nicht bei einem neuen Eintrag :X

  5. Soxbomb sagt:

    Vielen Dank für die super schnelle Antwort!
    OnOpen klingt sehr gut, leider will es bei mir nur nicht funktionieren, erkennst du den Fehler?

    function myCalendar(){
    function onOpen(){
    var now=new Date();

    // Startzeit
    var startpoint=new Date(now.getTime()-60*60*24*100*1000);
    // Endzeit
    var endpoint=new Date(now.getTime()+60*60*24*100*1000);

    var events=CalendarApp.getCalendarById("xxx").getEvents(startpoint, endpoint);

    var ss=SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Termine");

    ss.clear();

    var zeile=1;
    for (var i=events.length-1;i>=0;i–) {
    ss.getRange(zeile,1 ).setValue(events[i].getTitle());
    ss.getRange(zeile,2).setValue(events[i].getDescription());
    ss.getRange(zeile,3).setValue(events[i].getStartTime());
    ss.getRange(zeile,4).setValue(events[i].getEndTime());
    zeile++;
    }
    }
    }

    • Chris sagt:

      Schau Dir mal den Link an und das dazugehörige Script was ich Dir gerade geschickt habe. Da wird sozusagen Deine Funktion in der onOpen Funktion aufgerufen.
      onOpen wird immer automatisch von Google aufgerufen beim Öffnen der Tabelle. Du hast die Funktion jetzt in Deine integriert was so aber nicht funktioniert.
      Also onOpen extra lassen und darin Deine Funktion aufrufen. In dem Beispielscript sieht Du wie das aufgebaut ist. Dann sollte es funktionieren 😉

  6. Soxbomb sagt:

    Hab es jetzt so probiert, so schaut es in deinem Link aus, aber auch da will er einfach nicht 🙁
    Er fragt mich auch nach "Funktion auswählen"
    :/
    function onOpen(){
    }
    function myCalendar(){
    var now=new Date();

    // Startzeit
    var startpoint=new Date(now.getTime()-60*60*24*100*1000);
    // Endzeit
    var endpoint=new Date(now.getTime()+60*60*24*100*1000);

    var events=CalendarApp.getCalendarById("xxxmail.com").getEvents(startpoint, endpoint);

    var ss=SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Termine");

    ss.clear();

    var zeile=1;
    for (var i=events.length-1;i>=0;i–) {
    ss.getRange(zeile,1 ).setValue(events[i].getTitle());
    ss.getRange(zeile,2).setValue(events[i].getDescription());
    ss.getRange(zeile,3).setValue(events[i].getStartTime());
    ss.getRange(zeile,4).setValue(events[i].getEndTime());
    zeile++;
    }

    }

    • Chris sagt:

      Na ja, ich hatte Dir diesen Link geschickt:
      https://toptorials.com/daten-sortieren-beim-oeffnen-google-tabellen-spreadsheets-script/
      Hier ist innerhalb der onOpen Funktion der Funktionsaufruf. Also sollte Deine onOpen Funktion folgendermaßen aussehen:

      function onOpen(){
      myCalendar();
      }

      Das ganze funktioniert aber nur mit Google Kalender. Die ID die bei getCalendarById stehen müsste ist eine ID für einen Google Kalender. Das zeige ich aber auch im Video-Tutorial. Ich habe nämlich gerade dieses xxxmail.com gesehen. Hoffe Du hast das jetzt nur für diese ID ersetzt damit das keiner lesen kann???

  7. Soxbomb sagt:

    Hab die Email nur raus genommen bzw. ID
    Es sieht nun so aus, und irgendwie tut sich auch was aber er will noch nicht richtig durchstarten, sobald ich was im Kalender lösche bleibt es in der excel, füge ich etwas im Kalender hinzu kommt es nur rein wenn ich über tools das script starte 🙁

    Danke für deine Hilfe!

    function onOpen(){
    myCalendar();
    }

    var now=new Date();

    // Startzeit
    var startpoint=new Date(now.getTime()-60*60*24*100*1000);
    // Endzeit
    var endpoint=new Date(now.getTime()+60*60*24*100*1000);

    var events=CalendarApp.getCalendarById("@gmail.com").getEvents(startpoint, endpoint);

    var ss=SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Termine");

    ss.clear();

    var zeile=1;
    for (var i=events.length-1;i>=0;i–) {
    ss.getRange(zeile,1 ).setValue(events[i].getTitle());
    ss.getRange(zeile,2).setValue(events[i].getDescription());
    ss.getRange(zeile,3).setValue(events[i].getStartTime());
    ss.getRange(zeile,4).setValue(events[i].getEndTime());
    zeile++;
    }

    • Chris sagt:

      Wie gesagt onOpen wird nur aufgerufen wenn Du die Tabelle öffnest. Du kannst ja mal statt onOpen auch onEdit versuchen. Dafür brauchst Du nur den Funktionsnamen onOpen in onEdit zu ändern.

    • Chris sagt:

      oder noch besser beide Funktionen. Denn wenn Du onEdit benutzt wird das nicht aktualisiert wenn Du die Tabelle das erste mal wieder aufrufst. Also doch besser beide Funktionen benutzen und Deine Funktion damit aufrufen.

  8. Soxbomb sagt:

    Hab jetzt mal beide Funktionen eingebaut aber … vielleicht soll es einfach nicht sein …^^ Will dir da auch nicht deine Kostbare Zeit kaputt machen, ich danke dir für deine Hilfe!

    function onEdit(){
    function onOpen(){
    myCalendar();
    }
    function myCalendar(){
    var now=new Date();

    // Startzeit
    var startpoint=new Date(now.getTime()-60*60*24*100*1000);
    // Endzeit
    var endpoint=new Date(now.getTime()+60*60*24*100*1000);

    var events=CalendarApp.getCalendarById("teamvidar@gmail.com").getEvents(startpoint, endpoint);

    var ss=SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Termine");

    ss.clear();

    var zeile=1;
    for (var i=events.length-1;i>=0;i–) {
    ss.getRange(zeile,1 ).setValue(events[i].getTitle());
    ss.getRange(zeile,2).setValue(events[i].getDescription());
    ss.getRange(zeile,3).setValue(events[i].getStartTime());
    ss.getRange(zeile,4).setValue(events[i].getEndTime());
    zeile++;
    }

    }

    }

    • Chris sagt:

      Mach das mal so:
      function onOpen(){
      myCalendar();
      }

      function onEdit(){
      myCalendar();
      }

      Die erste Funktion wird ausgeführt beim Öffnen der Tabelle oder beim aktualisieren des Fensters.
      Die zweite Funktion wird ausgeführt wenn Du etwas in einer Zelle ändern solltest.
      Aber jetzt muss es einfach funktionieren 😉 😉 😉

  9. Soxbomb sagt:

    Jetzt geht es ! 😀 Danke Dir und sry sry das ich dich so beschäftigt habe! Vielen Vielen Dank!

    • Chris sagt:

      Super, freut mich zu hören. Ich habe den letzten Kommentar gerade nochmal kurz geändert, denn dort hatte ich zweimal die gleiche Funktion drin. Du brauchst onOpen und onEdit.
      Hatte versehentlich zweimal onEdit eingetragen.
      Wünsche noch einen schönen Sonntag Abend 😉

  10. Leonid sagt:

    Hallo Chris,
    vorab vielen Dank für deine hilfreichen Tutorials:-)

    Ich habe mich mal an die Fragestellung der Steffi gewagt ( Termine von Tabelle in Kalender übernehmen). Hier der Code:

    function onOpen(){
    addEvents();
    }

    function addEvents (){
    var ss=SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Kalender");
    var lr = ss.getLastRow();
    var cal = CalendarApp.getCalendarById("KALENDER");

    var data = ss.getRange("A2:F" + lr).getValues();

    for (var i = 0;i<data.length;i++){

    cal.createEvent(data[i][0],data[i][1],data[i][2], {location:data[i][3], description:data[i][4]});
    }
    }

    Will nun, dass die bisherigen Kalendertermine gelöscht und mit den neuen gefüttert werden. Ansonsten stehen die Termien ja doppelt drin.
    Kannst du mir hierbei helfen? Vielen Dank

  11. Lene sagt:

    hallo chris, ich wünsche mir, dass ich in google tabellen meine Termine eintragen kann, und es diese dann automatisch auf meinen Kalender importiert. Wie geht das?
    Hast du einen Code für mich?
    Würde mich sehr über eine schnelle Antwort freuen

    • Chris sagt:

      Hi, schnelle Antworten gibt es hier leider nicht (mehr). Ich habe momentan ein Aufkommen von über 2000 Kommentaren pro Monat (Toptorials.com und auf anderen YouTube Kanälen).
      Du kannst aber mal in den Kommentaren unten schauen, dort hat jemand schon ein kurzes Script erstellt welches Du entsprechend anpassen kannst.
      Viele Grüße
      Chris

  12. Eckhard sagt:

    Hallo Chris!
    Danke für Deine Artikel.

    Ich habe in einem Google account diverse Kalender selber angelegt und auch von anderen "abboniert".
    Kann man das Script auch so umwandeln, dass es alle Kalender auf einmal abholt?
    (es sind auch ical abonierte Kalender (nicht von google dabei)

    • Chris sagt:

      Das Script ist relativ simpel aufgebaut und es sollte kein Problem sein das für mehrere Kalender anzuwenden. Bisher habe ich das nur mit eigenen Kalendern probiert und in wieweit das bei anderen funktioniert habe ich noch nicht testen können.
      Je nachdem wie Du das Ergebnis zurückgeliefert haben willst musst Du das Script natürlich entsprechend anpassen. Es gibt ja dafür verschiedene Ideen um das umsetzen zu können. In jede Tabelle einen Kalender oder alle Kalender untereinander in einer Tabelle sowie die Termine ineinander gemischt in einer Tabelle und so weiter.
      Wenn Du jeden Kalender in einer eigenen Tabelle machen willst ist das vermutlich die einfachste Variante. Wenn Du das so machen willst dann kannst Du das Script mehrfach kopieren und änderst nur den Funktions und Tabellennamen. Zum Schluss erstellst Du Dir eine Funktion die alle Funktionen aufruft damit Du nur einen Button zum aktualisieren drücken musst oder packst diese Funktionsaufrufe in eine onOpen Funktion damit die Funktionen aufgerufen werden wenn Du das Tabellendokument öffnest oder aktualisierst.

  13. Eckhard sagt:

    Hallo,

    kann immer nur sagen, DANKE für DIESE TOLLEN SEITEN!

    Ich habe hier allerdigns ein Problem…ich hatte gehofft, dass dieser Import – anders als eine ICAL Datei – die Termine gleich "ausgerollt" hat. Damit meine ich 1 zu 1 wie die Terminübersicht in Google Kalender selber. Während er das bei wiederkehrenden Terminen ordenlich macht, fehlt dies bei tagesübergreifenden Terminen. Abstraktes Beispiel: Das dreitägige Schützenfest wird nur am 1. Tag angezeigt (da allerdings auch dass es drei Tage dauert. Ich hätte mir gewünscht, dass es an jedem der drei Tage im Kalender steht – wie bei google auch.

    Dies hat wohl nichts mit dem Skript zu tun, sondern hängt wohl mehr an googles export, oder?

    Auch hat er hier das Problem, dass er einen eintägigen ganztägigen Termin bis zum nächsten Tag anzeigt (von bis). Der Termin selber steht aber richtigerweise zum Glück nur an dem Tag drin. Bei Terminen mit Uhrzeit macht er das nicht. Das Problem habe ich auch schon bei der ICAL Schnittstelle beobachtet. Hängt ggf. mit Zeitumstellung zusammen.

  14. Eckhard sagt:

    Hallo Chris,

    ein weiterer Punkt: Im Video wird gesagt, dass es auch mit dem Grund/Hauptkalender geht.

    Leider zeigt er bei mir beim Hauptkalender in google bei ID nur meine e-mail-Adresse an.
    Damit geht es leider nicht. Hat sich hier etwas bei google geändert?

    • Chris sagt:

      Ich habe das gerade noch einmal getestet. Ich hatte den Testkalender in der Zwischenzeit gelöscht und musste mir noch einmal schnell einen neuen machen und die ID davon testen. Das hat alles normal geklappt.
      Auch mit dem Hauptkalender hatte ich keine Probleme. Bei mir war es auch die Emailadresse die ich für den Hauptkalender als ID benutzen musste. Die Termine wurden mir auch ohne Probleme angezeigt.
      Die Emailadresse muss natürlich auch in Anführungszeichen stehen damit es klappt.

      • Eckhard sagt:

        Danke Chris für Deine Antwort. Du hast recht, es klappt doch mit dem Hauptkalender. Weiss nicht, was ich falsch gemacht hatte. Mea culpa!

        Mein Problem (Eintrag vom 4. November 2018 um 17:43 Uhr) stellt mich allerdings weiter vor einer großen Herausforderung bzw. weiss nicht, ob ich den Kalender nutzen kann, wenn das nicht geklärt ist.

        Möchte halt im Ergebnis 1:1 die Übersicht von google selber wieder haben.

        • Chris sagt:

          Da müsste ich lügen und ich glaube das ist etwas komplizierter zu programmieren. Wenn ein Termin über mehrere Tage geht müsste man vermutlich alle Daten in ein Array packen und vorher jeden einzelnen Tag noch einmal separat betrachten. Würde ein Eintrag über mehrere Tage gehen würde man das Array entsprechend erweitern und die zusätzlichen Tage eintragen also den Eintrag splitten sodass in dem Array für einen 3 Tage Termin dann 2 zusätzliche Tage eingetragen werden (Haupteintrag und die 2 zusätzlichen Tage).
          Funktionieren würde das bestimmt aber ist halt immer mit etwas Aufwand verbunden.

  15. Patrick sagt:

    Hallo Chris

    Als erstes möchte ich dir herzlich Danken für deine genialen Beiträge.

    Nun habe ich leider doch noch eine Frage, welche ich mit der Sufu nicht klären konnte.

    Ich habe bei mir alle (ca. 5 Kalender) wie nach deiner Anleitung in die Google Tabelle "eingefügt" und dies funktioniert.
    Nun zu meiner Frage:

    Kennst du oder besser gesagt hast du eine Möglichkeit die Tabelle mit den Kalender Einträgen automatisch zu aktualisieren?
    Leider sind bei mir "nur" die Daten mit dem "Stand Gestern". Beim anwählen "Letzte Änderung gestern um 17:29" öffnet sich nur ein neues Fenster welches aber anschliessend leer bleibt.

    Ich hoffe du kannst du bei meinem Problem weiterhelfen.

    Vielen Dank

    Gruss Patrick

    • Chris sagt:

      Hallo Patrick,
      Um die Kalenderdaten immer aktuell zu halten könntest Du mehrere Dinge machen. Zum Einen die Funktion in eine onOpen Funktion oder onEdit packen oder einen zeitlich gesteuerten Trigger benutzen der nach angegebenen Intervallen das Script ausführt.
      Was die zeitliche Geschichte angeht könnte es eventuell sein dass im Script die Zeitangabe angepasst werden muss oder aber auch die lokalen Zeiteinstellungen in den Einstellungen nicht übereinstimmen.
      Hinweis: Dein Kommentar ist im Spam Ordner gelandet weil angeblich eine falsche IP Adresse benutzt wurde?
      Viele Grüße
      Chris

Schreibe einen Kommentar

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