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

24 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

Schreibe einen Kommentar

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