Bulk Calendar – Mehrere Termine auf einmal bei Google Calendar eintragen

Ihr kennt das: Man will weder einen einzelnen Termin in seinen Google Calendar eintragen, noch einen Serientermin erstellen. Man hat beispielsweise eine Reihe an Seminaren mit verschiedenen Themen, irgendwelche Meetings an wechselnden Orten oder die Fussballtermine der Kinder gegen verschiedene Gegener. Man kann jetzt entweder auf die Details verzichten und doch einen Serientermine anlegen, oder aber man hat viel Handarbeit vor sich.

Genau diese Handarbeit kann man sich deutlich erleichtern, indem man die anzulegenden Termine in eine simple Google Tabelle einträgt und anschließend dort ein Skript startet, welches diese tabellarisch erfassten Daten in einen Kalender einträgt. Es ist schon etwas länger her, dass ich mich auf die Suche nach einem solchen Skript gemacht habe. Daher fehlt mir jetzt leider die Referenz auf das Original an dem ich anschließend noch ziemlich weitergebastelt habe.

Ich habe hier eine Kopie meiner Tabelle erstellt und freigegeben. Sieht in etwas so aus:

Bulk Calendar - Tabelle

Wenn du die Tabelle und das Skript verwenden willst erstellst du dir am besten erst mal eine Kopie der Tabelle (das Skript ist darin eingebettet):

Bulk Calendar - Kopie erstellen

Zuerst muss man logischerweise die gewünschten Daten in die Tabelle eintragen (Tabelle s.o.). Die grau markierten Zellen (Start- und Endzeitpunkt) dürfen nicht editiert werden. Wichtig ist, dass man die Formel in den grauen Spalten nur soweit nach unten kopiert, wie auch Daten in die Zeilen eingetragen sind:

Bulk Calendar - Formeln

Anschließend muss das Skript ausgeführt werden:

Bulk Calendar - Tools - Skriptmanager

Bulk Calendar - Skriptmanager Ausführen

Beim Ausführen des Skript gibt es diverse Kontroll-Dialoge, die man einfach im Skript nach Belieben auskommentieren kann.

Der Vollständigkeit halber hier noch der Code des Skripts. Wie immer quick’n’dirty, tut es aber für mich. Falls jemand damit weiter bastelt bin ich offen für Anregungen.


// Custom Menu:
// see https://developers.google.com/apps-script/guides/bound#custom_menus_dialogs_and_sidebars
function onOpen() {
  
//  var cals = CalendarApp.getAllOwnedCalendars();
//  Browser.msgBox('Es gibt genau %s Kalender zu Auswahl:', CalendarApp.getAllOwnedCalendars().length);
//  for (var c=0; c < cals.length; c++) {
//    ui.createMenu('Termine eintragen')
//      .addItem(cals[c].getName(), 'TermineInCalendarEintragen')
//      .addToUi();
//  }  
  
  var ui = SpreadsheetApp.getUi();
  ui.createMenu('Termine eintragen')
      .addItem('Go!', 'TermineInCalendarEintragen')
      .addToUi();

}





function TermineInCalendarEintragen() {
 
  // Default-Kalender auswählen:
  //var cal = CalendarApp.getDefaultCalendar();
 
  // Besser: Auswahl an Kalendern anbieten.
  // Ansatz: Alle möglichen Kalender auflisten, per Eingabefeld den gewünschten eingeben lassen:
  var kalenderauswahl = 'In welchen Kalender sollen die Termine eingetragen werden?\\n\\n';
  // Alle eigenen Kalender abrufen:
  var cals = CalendarApp.getAllOwnedCalendars();
  
  Logger.log('Es gibt genau %s Kalender zu Auswahl:', cals.length);
  
  // Kalender durchgehen und Ausgabenachricht zusammenbasteln:
  //for (c in cals) {
  for (var c=0; c < cals.length; c++) {
    Logger.log("ID: " + cals[c].getName());
    kalenderauswahl = kalenderauswahl + '- ' + cals[c].getName() + '\\n';
  }
  kalenderauswahl = kalenderauswahl + '\\nBitte Kalendername EXAKT eingeben:';
  var kalendername = Browser.inputBox(kalenderauswahl)
  Logger.log("Kalender: " + kalendername);
  
  // Jetzt den Kalender mit dem übergebenen Namen auswählen:
  cal = CalendarApp.getCalendarsByName(kalendername);
 
  
  // Falls ein (brauchbarer) Kalendername eingegeben wurde:
  if (kalendername && cal.length > 0) {
    Browser.msgBox('Kalender "' + cal[0].getName()  + '" gewählt.')
    
    // Jetzt werden die Daten aus der Tabelle gezogen:
    var sheet = SpreadsheetApp.getActiveSheet();
    var startRow = 2;
    var numRows = SpreadsheetApp.getActiveSheet().getLastRow()-1;  // -1, weil die Kopfzeile keine Daten enthält
    Browser.msgBox('Es sollen ' + numRows + ' Termine eingetragen werden.')
    // Datenbereich auswählen:
    var dataRange = sheet.getRange(startRow, 1, numRows, 8);
    // Daraus Daten in Variable schreiben:
    var data = dataRange.getValues();
    // Jetzt jede Zeile durchgehen:
    for (d in data) {
      // Daten aus dieser Zeile wählen:
      var row = data[d];
      
      // Jetzt einzelne Felder davon:
      var title  = row[0];
      var tstart = row[4];
      var tstop  = row[5];
      var loc    = row[6];
      var desc   = row[7];
      
      // Jetzt wird der Termin eingetragen:
      // https://developers.google.com/apps-script/class_calendarapp?hl=de#createEvent
      cal[0].createEvent(title, tstart, tstop, {description:desc,location:loc});
      
      // ... und noch eine Meldung ausgegeben. Denn manchmal steigt das Skript aus, und so weiß man, wie weit es war.
      Browser.msgBox( parseInt(d)+1 + '. Termin in Kalender "' + kalendername + '" eingetragen:\\n\\n' + title + '\\n\\n' +  tstart + '\\n\\n' + desc )
    }
    // Am Ende nochmal Meldung, dann ist klar, dass alles durchgelaufen ist:
    Browser.msgBox('Fertig!');
  }
  else {
    Browser.msgBox('Kein Kalender ausgewählt oder Kalender falsch angegeben...')
  }
}


60 Reaktionen auf “Bulk Calendar – Mehrere Termine auf einmal bei Google Calendar eintragen

  1. Alex

    Hey,
    echt gutes Tutorial und vielen vielen Dank für das Skript!

    Damit ist das Eintragen der Termine bei weitem einfacher und vor allem schneller geworden!

    mfg

    Antworten
  2. lunalabs

    Cooles Tool!
    Was ich noch gern bei Terminen mache, ist eine Erinnerung zu hinterlegen, damit eine gewisse Zeit davor ein Pop-Up erscheint und mich an die Sache erinnert. Weisst du, ob dies einfach zu implementiern wäre?

    MfG

    Antworten
    1. dasaweb Beitragsautor

      Hallo lunalabs,

      freut mich, dass dir das Tool weiter hilft! Hab eben nochmal in der Doku nachgesehen, ob es möglich ist, einen Termin mit einer Erinnerung anzulegen, scheint aber nicht so zu sein. Siehe https://developers.google.com/apps-script/reference/calendar/calendar-app?hl=de#createEvent(String,Date,Date,Object)

      Allerdings kannst du ja für jeden Kalender separat einstellen, wie die Erinnerungen sein sollen (unter „Kalendereinstellungen“ > „Benachrichtigungen bearbeiten“). Bin mir nicht sicher, ob mit dem Skript erzeugte Termine dadurch auch die Standartbenachrichtigungen erhalten, könnte mir das aber vorstellen. Einfach mal ausprobieren.

      Antworten
  3. Bernhard Frye

    Tolles Projekt! Würde das gern für meine Notfalldienste einsetzen, habe auch die Anleitung brav befolgt, finde aber unter Tools den Script Manager nicht. Wenn ich stattdessen den Script editor öffne, eins der dreei hinterlegten Scripts anwähle und „run“, kommen keine Dialoge und im meinem Kalender erscheinen ausch keine Einträge. Kann ich z.B. den Script manager unter Tools anzeigen lassen?

    Antworten
    1. dasaweb Beitragsautor

      Musste mir das gerade selbst noch mal ansehen. Tatsächlich hat sich da bei Google einiges geändert. Bei mir klappt es, wenn ich auf „Tools“ > „Skripteditor“ gehe und das Script dort mit dem Play-Button ausführe. Allerdings kommen die ganzen Dialoge nicht in dem Fenster / Tab mit dem Skript, sondern in dem Tab mit der Tabelle.

      Antworten
  4. Sebastian

    Hallo dasaweb,
    ich habe gerade versucht ein paar Termine über das Script zu importieren. Leider passiert nichts bei dem Script. Benötige ich irgendwelche Bibliotheken?
    Danke und Grüße

    Antworten
    1. dasaweb Beitragsautor

      Nein, man braucht weiter keine Bibliotheken oder so. Wie schon im letzten Kommentar geschrieben musst du das Skript in dem einen Fenster starten und dann in dem Fenster mit der Tabelle weitermachen. So klappt es bei mir.

      Antworten
  5. Florian

    Hallo dasaweb,
    ich habe mich auch sehr über den Bericht von Dir gefreut, allerdings klappt das bei mir über deinen Link auch nicht wirklich. Dein Link führt einen auch nicht zu einer “Bulk Calendar“ Tabelle, sondern zu einer mit dem Titel Pfannkuchen. Kann das sein, dass drin der Fehler liegt? Ich würde mich sehr freuen, wenn ich die Richtige Tabelle bei Dir kopieren könnte, denn ich bekomme es selber leider nicht hin 🙁
    Mit freundlichen Grüßen und Danke schon mal im Voraus!

    Antworten
    1. dasaweb Beitragsautor

      Hallo Florian,

      ha, da haben wohl ein paar Scherzbolde meine Tabelle etwas umgearbeitet 😉 Ich hab sie mal wieder hergestellt. Schau mal, ob du damit jetzt weiter kommst.

      Viele Grüße
      Daniel

      Antworten
  6. Sven

    Servus dasaweb,

    ich bin die Anleitung 1:1 durchgegangen und alles beachtet. Nach dem Ausführen von von TermineInCalendarEintragen und drücken des Play Buttons, wurde gefragt ob Zugriff auf mein Konto gewährt werden darf, was ich bestätigt habe und im Excel Sheet erschien sofort „Fertig“. Eingetragen ist leider nichts. Hat sich da was geändert?

    Gruß Sven

    PS: Danke für die Mühe, die du da rein steckst 😉

    Antworten
    1. dasaweb Beitragsautor

      Servus Sven,

      das Skript ist tatsächlich nicht mehr gelaufen. Schon ärgerlich, wenn Google da ab und zu an seinen Objekten schraubt und so Sachen dann buggy werden. Hab’s mal wieder gefixt und auch den Code hier im Blogpost angepasst. Kannst ja jetzt nochmal testen.

      Grüße!

      Antworten
  7. Daniel

    vielen Dank, das Script läuft jetzt wieder 🙂 Nur eine Frage: hat jemand rausgefunden, ob man sich das Script vielleicht auf einen Button in der Tabelle direkt legen kann ? Also ich stelle mir wie in Excel vor, einen Button „Termine eintragen“ zu machen und dann startet das Script. Aktuell ist es mit dem Play-Knopf etwas umständlich für manche User 🙁

    Antworten
    1. dasaweb Beitragsautor

      Ob man hier auch einen Button erstellen kann weiß ich nicht, hab ich auf die Schnelle nichts gefunden. Was aber leicht geht ist einen separaten Menueintrag zu machen, siehe https://developers.google.com/apps-script/guides/bound#custom_menus_dialogs_and_sidebars und https://developers.google.com/apps-script/guides/menus.

      Hab das mal ins Skript mit eingebaut. Noch schöner wäre es, man könnte im Menu gleich auswählen, in welchen Kalender es eingetragen werden soll, aber auch da bin ich leider nicht weit gekommen…

      Antworten
      1. Daniel

        Sehr sehr gut! Für mich ist das optimal – werde es am Montag mit meinen Kollegen probieren ob die das verstehen 😉 Ich habe im Script den Kalender fest verdrahtet ( ist unser Team-Kalender ) daher müssen die gar nix auswählen. Aber theoretisch müsste man ja die Kalender des Users auch bei der OnOpen function auslesen können … hmm ich versuche mal mein Glück daran 😉

        Aber schon mal vielen herzlichen Dank ! Dafür gebe ich ein Bier aus ! 😉

        Antworten
        1. dasaweb Beitragsautor

          Freut mich, wenn ihr das nutzt. Das mit dem Auflisten des Kalenders bei OnOpen hab ich versucht, hat aber irgendwie nicht geklappt. Und das Debugging finde ich da schwierig…

          Hab nix gegen ein Bier 😉 Wann und wo? Oder virtuell?

          Antworten
      2. Ralf

        Cool, vielen vielen Dank. Mir war überhaupt nicht bekannt, dass man Goole Apps scripten kann. Jetzt habe ich innerhalb von 2 Stunden sogar ein Script angepasst und viel gelernt.

        In Sachen separatem Menüeintrag habe ich eine Lösung gefunden: onOpen ist ein „simple trigger“ und die dürfen keine Services anfassen, die einer Autorisierung bedürfen (also z.B. den Calendar). Man kann aber einen Trigger (bei mir dann eine Funktion onOpenInstalled) installieren, dann geht das. Eine Anleitung findet sich hier: https://developers.google.com/apps-script/guides/triggers/#Simple

        Super Idee übrigens im Code links zur Doku zu posten 🙂

        Antworten
        1. dasaweb Beitragsautor

          Ich hab nur Lesezugriff bei dem Dokument, kann daher nicht in den Code sehen. Du kannst mir den Code auch gerne per Mail schicken oder so, vielleicht pflege ich das dann oben mit ein: daniel@DIESE-DOMAIN-HIER

          Antworten
  8. Christian

    Hallo dasaweb,

    danke für das Dokument – das Eintragen hat wirklich super geklappt und eine Menge Arbeit erspart… Was bei mir nicht funktioniert hat: die Zelle mit dem aus Datum und Uhrzeit zusammengesetzten Wert hat (warum auch immer) ständig das falsche Datum ermittelt… ich hatte die Zeilen gelöscht und die Zellen dann dann per Maus mehrfach dupliziert, konnte aber keinen Fehler in der Formel erkennen – hatte aber immer das Problem, pro Zeile dann das Datum +1, +2, +3 usw. errechnet wurde? Mag aber an meiner Unwissenheit beim Umgang mit Google Docs liegen, war der erste Versuch.

    Trotzdem ein riesen Dankeschön!

    Christian

    Antworten
    1. dasaweb Beitragsautor

      Hallo Christian,

      du meinst die Spalten E und F? Hast du meine Tabelle dupliziert, oder dir selbst eine neue angelegt? Vielleicht hast du irgendwelche Spalten nicht als Datum formatiert? Ist jetzt bisschen Fischen im Trüben, wenn man die Tabelle nicht vor sich hat…

      Antworten
    2. Tigerentchen

      Hatte das gleiche problem, das liegt am weiterziehen der Start-Uhrzeit,
      googledocs interpretiert das dann so, dass du in jeder spalte den nächsten tag haben willst (anders als excel).
      Also irgendwie anders kopieren (z.b. crtl+c,ctrl+v) oder einfach die start und endzeiten manuell befüllen nicht mit der gegebenen formel berechnen lassen.
      Liebe Grüße

      Antworten
  9. Sebastian Schäfer

    Hallo dasaweb,

    vielen Dank für das Skript. Funktioniert super. Hatte es vorher leider schon mal in Excel abgetippt und habe jetzt noch ein bisschen mehr Arbeit, aber für die nächsten Termine ist das super. Ich hätte noch eine Frage:
    Kann ich mir die Termine auch farblich markieren? Bzw. Muss ich dann eine bestimmte Zeile farblich markieren, damit der Termin farblich unterlegt wird? Geht das oder muss ich das manuell machen?
    Vielen Dank. Lg

    Antworten
  10. Jonathan

    Hallo dasaweb,

    sehr coole Idee!
    Habe das Skript von dir in den Skripteditor kopiert, wenn ich auf Play drücke kommt jedoch leider folgende Fehlermeldung:
    „TypeError: Funktion getName in Objekt Calendar nicht gefunden (Zeile 40, Datei „Code“)“

    Hab ich irgendwas vergessen oder falsch gemacht?

    Viele Grüße und danke schonmal,
    Jonathan

    Antworten
      1. Jonathan

        Hatte zuerst die Tabelle kopiert und dann noch das Skript zusätzlich. Hab jetzt nochmal nur die Tabelle übernommen und es funktioniert. Dankeschön!

        Antworten
  11. Olaf Hars

    Vielen Dank! Das ist wirklich eine große Hilfe!
    Noch eine Frage: Wie kann ich Termine als ganztägig eintragen lassen?
    Nochmals Danke und schöne Grüße,
    Olaf

    Antworten
    1. dasaweb Beitragsautor

      Hallo Olaf,

      diesen Anwendungsfall hatte ich noch nicht. Wenn man in die Doku schaut (https://developers.google.com/apps-script/reference/calendar/calendar-app?hl=de#createalldayeventtitle-date-options) sieht man, dass es statt der createEvent()-Methode auch eine createAllDayEvent()-Methode gibt. Damit sollte sich das Skript oben leicht anpassen lassen. Man könnte es auch so erweitern, dass er diese Methode verwendet, wenn in der Tabelle keine Uhrzeit angegeben ist.

      Grüße!
      Daniel

      Antworten
        1. dasaweb Beitragsautor

          Hallo Walter,

          hast du mal einen Blick in die Doku hier geworfen? https://developers.google.com/apps-script/reference/calendar/calendar-app?hl=de Da gibt es ja ein createEvent() und ein createAllDayEvent(), die Unterschiede sind trivial. Logischerweise brauchst du in der Tabelle dann nicht mehr Start- und Enddatum inkl. Uhrzeit, sondern nur noch eine Spalte mit dem Datum. Dann änderst du die Zuweisung im Code z.B. irgendwie so:

          var title = row[0];
          var date = row[4];
          var loc = row[5];
          var desc = row[6];

          Je nachdem, wie du die Spalten eben anordnest. Und dann machst du aus

          eventId = cal[c].createEvent(title, tstart, tstop, {description:desc,location:loc});

          irgendwie sowas:

          eventId = cal[c].createAllDayEvent(title, date, {description:desc,location:loc});

          Vielleicht muss es auch so aussehen, siehe Doku:

          eventId = cal[c].createAllDayEvent(title, new Date(date), {description:desc,location:loc});

          Ist ungetestet, aber damit solltest du weiter kommen.

          Antworten
  12. Bettina

    Hallo Daniel,

    nur ein kurzes Dankeschön. Ich hatte mich vorher noch nie mit diesem Thema beschäftigt und hab jetzt richt „blutgeleckt“. Ich hab dein Script so um gebaut, dass ich zu bestehenden Kalendereinträgen (Abholtermine Müllabfuhr :)) Benachrichtigungen zufügen konnte.

    Viele Dank
    Bettina

    Antworten
  13. Bettina

    Hallo nochmal 🙂

    hast du eine Idee warum das

    function getKalender() {
    var tabellenname = „myDaten“;
    var zelle = „Kalender“;
    var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(tabellenname);
    var xKalender = sheet.getRange(„Kalender“).getValue();
    Return xKalender;
    }

    nicht funktioniert?

    Fehlermeldung:
    Fehlendes „;“-Zeichen vor Anweisung (Zeile 6, Datei „Kalenderauswahl“)

    Gruß Bettina

    Antworten
    1. dasaweb Beitragsautor

      Hi Bettina,

      die Funktion sieht syntaktisch korretkt aus, darin gibt es ber auch keine „Kalenderauswahl“ in Zeile 6… Ich bräuchte schon den kompletten Code, vielleicht einfach per Mail.

      Grüße!
      Daniel

      Antworten
  14. Richard

    Hallo,

    genial! Ich habe endlich eine Lösung für mein Terminproblem gefunden (-: Dankeschön!

    Frage: Wie kann ich bei der Dauer statt 8 Stunden 8.30 eintragen?

    Habe ein bisschen an der Datei romgeschraubt, aber, es kommt leider nichts ordentliches dabei raus!

    Für Hilfe wäre ich sehr dankbar.

    Viele Grüße

    Richy

    Antworten
  15. Konrad

    Danke, danke, danke!
    Du hast mir hier locker eine Stunde Arbeit erspart – wir machen immer halbjährliche Dienstpläne für unsere Feuerwehr und ich hatte echt keine Lust immer wieder das gleiche bei Google einzutippen.
    Also – nochmal danke 😉

    Antworten
    1. dasaweb Beitragsautor

      Hallo Thomas,
      sowas könnte man bauen, ich das im Moment aber nicht leisten. Im Prinzip müsstest du ein Skript bauen wie oben. Darin würde ich so vorgehen:

      1) Kalender holen: https://developers.google.com/apps-script/reference/calendar/calendar-app?hl=de#getAllCalendars()
      2) Alle Events in einem bestimmten Zeitraum holen: https://developers.google.com/apps-script/reference/calendar/calendar-app?hl=de#getEvents(Date,Date,Object) Evtl. noch filtern nach Kalender (s.o.)
      3) Events löschen: https://developers.google.com/apps-script/reference/calendar/calendar-event?hl=de#deleteEvent()

      Vielleicht hilft dir das weiter.
      Grüße!

      Antworten
  16. Klaus

    Vielen Dank für das tolle und auch für DAU´s gut kommentierte Script.
    Das spart mir schon viel Arbeit.
    Ich habe versucht es so zu ändern, dass man auch angeben kann ob ein Termin als „Verfügbar“ oder „Beschäftigt“ angezeigt wird.
    Als DAU habe ich mir einfach das Feld „Descreption“ gekapert und durch „Transparency“ ersetzt.

    —————————————————————————
    // Jetzt einzelne Felder davon:
    var title = row[0];
    var tstart = row[4];
    var tstop = row[5];
    var loc = row[6];
    var trans = row[7];
    //var trans = row[8];

    // Jetzt wird der Termin eingetragen:
    // https://developers.google.com/apps-script/class_calendarapp?hl=de#createEvent
    cal[0].createEvent(title, tstart, tstop, {transparency:trans, location:loc} );
    —————————————————————————–

    Leider erzeugt er die Events weiterhin immer als „beschäftigt“. Hat jemand eine Idee was ich hier falsch mache?

    Antworten
    1. dasaweb Beitragsautor

      Hallo Klaus,

      schau mal hier (https://developers.google.com/apps-script/reference/calendar/visibility?hl=de) und vor allem dort (https://stackoverflow.com/questions/34908665/createevent-with-visibility-private).

      Du müsstest wohl aus

      cal[0].createEvent(title, tstart, tstop, {description:desc,location:loc});

      sowas in der Art machen:

      cal[0].createEvent(title, tstart, tstop, {description:desc,location:loc}).setVisibility(CalendarApp.Visibility.PRIVATE);

      Könntest ja ne 8. Spalte anlegen, die „privat“ oder so heißt und da z.B. ne 1 reinschreiben, wenn der Termin privat sein soll. Dann mit ner IF-Abftrage entweder das createEvent() mit oder ohne das setVisibility().

      Antworten
  17. KLaus

    Hi DasaWeb,

    vielen Dank. Das script hat auf Anhieb funktioniert. Ich kann jetzt automatisiert private Termine anlegen.

    Ursprünglich war ich auf der Suche nach einer Möglichkeit die erzeugten Termine als „Verfügbar“ bzw. „Gebucht“ zu setzen.
    Das ist in der Standard-Calender-Ansicht direkt neben dem Pulldown für Sichtbarkeit.

    Vermutlich ist das irgendwas mit SetStatus aber ich finde nur Möglichkeiten um den Gueststatus zu ändern, was nix bringt, weil meine Termine ja keinen Gast haben.

    Ich hatte es mit

    cal[0].createEvent(title, tstart, tstop, {description:desc,location:loc}).setMyStatus(CalendarApp.MyStatus.NO);

    versucht, aber dann kommt die Fehlermeldung
    TypeError: Cannot read property ‚NO‘ of undefined (Zeile 85, Datei „TermineInCalendarEintragen“)

    Auch „busy“ / „free“ anstatt „NO“ funktioniert nicht.

    Hast Du noch nen Tip?

    Antworten
    1. dasaweb Beitragsautor

      Hallo Klaus,

      o sorry, da hab ich dich wohl in die falsche Richtung geschoben… Vielleicht warst du mit dem „transparency“ tatsächlich auf der richtigen Spur. Komisch nur, dass das hier (t) nicht als Option auftaucht. Das bestätigt sich hier: https://stackoverflow.com/questions/13246884/google-apps-script-calendar-events-using-the-busy-modifier Man müsste wohl über den „Advanced Calendar Service“ gehen (was auch immer das ist): https://developers.google.com/apps-script/advanced/calendar#reference Das geht mir jetzt bisschen zu weit, ehrlich gesagt…

      Antworten
  18. Dennis Wieting

    Ich hatte ein Problem damit, dass die Funktion Browser.msgBox() genutzt wurde, um Benachrichtigungen anzuzeigen, wenn Termine in den Kalender eingetragen werden. Diese Funktion zeigt eine Pop-up-Meldung an und blockiert die Ausführung des Skripts, bis der Benutzer auf die OK-Schaltfläche klickt. Jedoch konnte ich das Skript erfolgreich modifizieren, sodass es nun einwandfrei funktioniert. Vielen Dank!

    // Vorher:
    Browser.msgBox( parseInt(d)+1 + ‚. Termin in Kalender „‚ + kalendername + ‚“ eingetragen:\\n\\n‘ + title + ‚\\n\\n‘ + tstart + ‚\\n\\n‘ + desc )

    // Nachher:
    Logger.log(parseInt(d)+1 + ‚. Termin in Kalender „‚ + kalendername + ‚“ eingetragen:\n\n‘ + title + ‚\n\n‘ + tstart + ‚\n\n‘ + desc )

    Antworten
  19. DBX

    Sieht nach einem sehr nützlichen Tool aus, dass ich gerne ausprobiert hätte um die ganzen Arzttermine meiner kranken Eltern einzutragen. Nach dem Klicken auf Go! kommt dann ein PopUp-Fenster, das leider nur anzeigt „Diese App ist blockiert. Diese App hat versucht, auf vertrauliche Daten in Ihrem Google-Konto zuzugreifen. Zum Schutz Ihres Kontos haben wir den Zugriff blockiert.“
    Bin dabei aber natürlich mit dem Googlekonto angemeldet, da ich ja auf die Kopie in GoogleDrive zugreife.
    Jemand eine Idee wie da zu verfahren ist?
    LG, DBX

    Antworten
      1. DBX

        Hi 🙂

        Ja genau. Kopie erstellt, in „Meine Ablage“ in mein Google Drive Konto. Vier Termine zum Ausprobieren eingetragen, überflüssige Zeilen gelöscht, auf „Termine eintragen“->“Go!“->PopUp „Autorisierung erforderlich
        Ein diesem Dokument angehängtes Skript kann erst ausgeführt werden, wenn Sie dies zugelassen haben.“->Weiter-Button->Popup „Anmelden“ mit Auswahl des Google-Kontos->Klick auf das Konto->Diese App ist blockiert

        Ich hatte schon fast Freudentränen in den Augen als ich über den Beitrag gestolpert bin, meine Eltern haben in den nächsten Wochen beide nach Stürzen, OP und fürchterlicher Verschlimmerung der Demenz mit zusammen 28 Arztterminen und dazu Physiotermine einen neuen Rekordverdacht 🙂 Yeah, dachte ich so, keine Klickorgie im Kalender, fein in Tabelle schubsen und Turbo an 🙂

        Antworten
        1. dasaweb Beitragsautor

          Ich habe es eben nochmal auf einem anderen Rechner mit einem anderen Google-Account versucht. An irgend einer Stelle kommt dann sowas wie:

          Google hat diese App nicht überprüft

          Die App möchte auf vertrauliche Daten in Ihrem Google-Konto zugreifen. Verwenden Sie diese App erst, wenn der Entwickler (……..@googlemail.com) sie bei Google verifiziert hat.
          Erweiterte Optionen ausblenden
          Fahren Sie nur dann fort, wenn Sie die Risiken verstanden haben und dem Entwickler (………….@googlemail.com) vertrauen.
          TermineInCalendarEintragen öffnen (unsicher)

          Ich kann also „erweiterte Optionen“ einblenden und dann die Zustimmung erteilen, dass das Skript ausgeführt wird. Dann geht’s.

          Antworten
          1. DBX

            Hey, vielen Dank für deine schnellen Antworten und die Bemühungen. „erweiterte Optionen“ wird bei mir leider nicht angeboten… Hab’s mal in Chrome, Edge und Firefox ausprobiert, jeweils auch einfach mal in einem Inkognito-Fenster. Kommt nur ein neues Fenster (https://accounts.google.com/signin/oauth/danger?authuser=) mit

            Diese App ist blockiert
            Diese App hat versucht, auf vertrauliche Daten in Ihrem Google-Konto zuzugreifen. Zum Schutz Ihres Kontos haben wir den Zugriff blockiert.

            Schade.

  20. elTamsa

    Hallo dasaweb,

    Ich habe auch alles entsprechender deiner Anleitung ausgeführt. (ich bin totaler Leihe)
    das Ausführungsprotokoll zeigt nur:
    Hinweis Ausführung begonnen
    Hinweis Ausführung abgeschlossen

    Im Kalender ist nichts passiert.

    Eine Idee?

    Vielen dank LG

    Antworten
  21. Leo

    Hallo,

    ich kann bestätigen, das Skript funktioniert (Stand Dezember 2023) immer noch.
    Die einzige Funktion die ich mir noch gewünscht hätte wäre es bereits in der Tabelle Farben für die Termine auszuwählen, jetzt hab ich die ganzen Termine doch noch einzeln bearbeiten müssen.
    Hab grade selber (zum ersten mal) in die Docs geachaut und das hier entdeckt:
    https://developers.google.com/apps-script/reference/calendar/calendar-event?hl=de#setColor(String)

    Vielen Dank für dieses Skript!

    Antworten

Schreibe einen Kommentar

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