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
function AlleMeineTermine(){ var ss=SpreadsheetApp.getActiveSpreadsheet().getSheetByName("AlleMeineTermine"); var now=new Date(); // Startzeit var startZeitpunkt=new Date(ss.getRange("B1").getValue()); // Endzeit var endZeitpunkt=new Date(ss.getRange("B2").getValue()); var events=CalendarApp.getCalendarById("32sfep7arna6opratj1i6lk5is@group.calendar.google.com").getEvents(startZeitpunkt, endZeitpunkt); var startZeile=5; var bgColors=["#5484ED","#A4BDFC","#46D6DB","#7AE7BF","#51B749","#FBD75B","#FFB878","#FF887C","#DC2127","#DBADFF","#E1E1E1"]; ss.getRange(("A"+startZeile)+(":H"+ss.getLastRow()+1)).setValue("").setBackground(""); if(events.length>0){ for (var i=0;i<events.length;i++) { ss.getRange(i+startZeile,1).setBackground(bgColors[events[i].getColor()]); ss.getRange(i+startZeile,2 ).setValue(events[i].getTitle()); ss.getRange(i+startZeile,3).setValue(events[i].getDescription()); ss.getRange(i+startZeile,4).setValue(events[i].getStartTime()).setNumberFormat("dd.MM.yyyy"); ss.getRange(i+startZeile,5).setValue(events[i].getStartTime()).setNumberFormat("hh:mm:ss"); ss.getRange(i+startZeile,6).setValue(events[i].getEndTime()).setNumberFormat("dd.MM.yyyy"); ss.getRange(i+startZeile,7).setValue(events[i].getEndTime()).setNumberFormat("hh:mm:ss"); ss.getRange(i+startZeile,8).setValue(events[i].getLocation()); } }else{ ss.getRange(startZeile,2).setValue("Keine Einträge gefunden"); } }
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
- Übersichts-Liste der GOOGLE Tabellen Script Tutorials
- IF / ELSE / ELSE IF Bedingungen (Google Script) Snippet
- Dynamischer Kalender mit Google Tabellen
- Kalender mit Tabelle verbinden / verknüpfen (Google Tabellen Script)
- Beispiel einer doppelten FOR Schleife (Google Tabellen Script)
- Tutorials über Google Tabellen
- Übersichts-Liste der Google Tabellen Tutorials
- Termin in den Kalender eintragen (Google Tabellen) Script
- Tutorials über Google Tabellen Script - Programmierung
- Ziel und Fahrtroute in Google Maps anzeigen (Google Tabellen)
50 Comments
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
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
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
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
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 :/
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.
Ne, wie müsste die Formel dann aussen?
ss.getRange(i+startzeile,9).setNumberFormat("dd/MM/yyyy");(events2018[i].getEndTime()). ?
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/
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?
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.
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
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
Hey Chris,
ich bekomme immer wieder die Anzeige "Skript nicht verifiziert"
Was kann ich machen?
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.
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
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
Hallo Thomas, ich habe jetzt auf den anderen Kommentar von Dir geantwortet:
https://toptorials.com/google-kalender-mit-tabelle-verbinden/
Die Kombination von Google Kalender und Excel habe ich selbst noch gar nicht ausprobiert.
Was ich aber gerade gesehen habe ist, dass Du den Google Kalender in Outlook integrieren kannst:
Google Kalender in Outlook anzeigen
Ich vermute von dort aus lässt sich dann bestimmt auch das eine oder andere noch in VBA programmieren.
Viele Grüße
Chris
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!
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
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
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
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
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
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
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
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
Ü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
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
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
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
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/
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.
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
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?
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
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.
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
Vielen Dank,
ich werde mein Glück mal versuchen.
Gruß und frohes Schaffen im Neuen Jahr
Erich
Das wünsche ich Dir auch. Vielen Dank.
Chris
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
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.
Vielen Dank für das tolle Tutorial!
Das hilft mir bei meiner Managment-Tätigkeit, hier in Japan, sehr!
Wie kann man eigentlich bestimmte Events ausblenden oder einfach weglassen?
Zum Beispiel wenn im Kalendereintrag "Fahrt nach…" steht oder "Date mit…" oder andere, nicht so passende Termine.
Vielen Dank im Voraus und Grüße in die Heimat nach Deutschland!
Gerome
Hallo Gerome du könntest so etwas zum Beispiel in der FOR Schleife integrieren.
Hier kannst Du dann mit einer IF oder IF / ELSE Abfrage bestimmte Einträge zulassen oder eben nicht. Die Abfrage kann sich dann auf den Titel oder auch der Beschreibung beziehen.
Ein Beispiel welches Dir ungefähr zeigt wie Du mit regulären Ausdrücken bestimmte Texte innerhalb vom Titel oder der Beschreibung finden könntest findest Du hier:
Textinhalt vergleichen & markieren (Google Tabellen / Spreadsheets) Script
Das musst Du natürlich erst noch auf deine Wünsche entsprechend anpassen aber dort stecken schon mal die Funktionen drin die Du für die Textsuche benötigst.
Ein Tutorial für die IF oder IF/ ELSE Abfrage findest Du hier:
IF und IF ELSE Abfrage
Deinen anderen Kommentar mit dem fast gleichen Inhalt habe ich gelöscht. Die Freigabe von Kommentaren dauert leider etwas, da ich zeitlich sehr eingeschränkt bin 😉
Viele Grüße
Chris
Hi Chris,
vielen Dank für das Tutorial. Läuft bei mir soweit gut, ich hätte nur gerne noch eine weitere Spalte, in der die Namen der Teilnehmer aufgeführt sind. Aktuell habe ich das mit get.Guests() gemacht, jedoch steht dann dort nur die E-Mailadresse eines einzelnen Teilnehmers und nicht eine Liste von allen Namen, die im Termin eingeladen sind.
Ich habe hier was rumgesucht: https://developers.google.com/apps-script/reference/calendar/calendar-event, aber ich habe es nicht hinbekommen, dass mir eine Gästeliste angezeigt wird.
Kannst du mir helfen?
Danke schon mal und viele Grüße,
Robby
Hi Chris,dein Tutorial ist super und auch für mich als Anfänger verständlich. Habe meinen Google Kalender ausgelesen und freue mich das alles so ist wie du es beschrieben hast. Ich möchte jetzt aus Spalte A wo die Farbmakierungen sind , die zu den unterschiedlichen Farben gehörigen Titel z.B. sotiert nach Farbe inSpalte H , I J usw. kopieren. Welche Formel muß ich dazu eingeben .
Freue mich über deine Antwort
Danke in voraus
Jürgen
Hallo Chris
Danke für Deinen Einsatz, welcher die Verwaltung und Ergänzung des Kalenders enorm rationalisiert.
In meinen Vortabellen, welche ich brauchte zum Importieren in den Google-Kalender, habe ich "All Day Event" und "Private" drin, welche mit "True" oder "False" funktionieren.
Die Ergänzung Deines Scriptes mit "getAllDayEvent" und "getPrivate" führte zu keinem Erfolg. Zumindest "Private" ist wichtig für die Pflege meines Kalenders, da selbiger öffentlich einsehbar ist als Verfügabar oder nicht verfügbar.
Dein Script ist für mich zum Lesen nachvollziehbar, doch weiss ich nicht, ob ich für "getPrivate" etwas ergänzen muss.
Grüsse
Ben
Ich habe das Script ein wenig erweitert. Damit kann ich filtern (Begriffe im Titel und in der Beschreibung suchen bzw. ausschließen), außerdem kann ich auswählen, welche Felder in welcher Reihenfolge angezeigt werden. und ob die Farbkennzeichnung übernommen wird. Bei Ganztagsterminen werden zur Verbesserung der Übersichtlichkeit die "00:00"-Uhrzeiten ausgeblendet und statt des Enddatums wird die Dauer in Tagen gezeigt. Die Geschwindigkeit ist ordentlich geblieben, für eine gefilterte Ganzjahres-Liste mit etwa 200 Einträgen lande ich bei ungefähr drei Sekunden.
Moin Chris,
ich habe alles genau so gemacht und wenn ich auf "Ausführen" klicke, komme ich zum PopUpFenster >>> Autorisierung erforderlich
Für dieses Projekt ist Ihre Erlaubnis zum Dateizugriff erforderlich. <<<
nach "Berechtigungen überprüfen geht es weiter mit Konto auswählen, das hab ich erledigt und dann kommt <<<< Autorisierung erforderlich
Für dieses Projekt ist Ihre Erlaubnis zum Dateizugriff erforderlich. <<<<< und der Button "zurück". Als nächstes "Google-Konto-Hilfe" und da weiß ich dann nicht mehr weiter. Im Endeffekt erhalte ich nachfolgende Meldung im Datenblatt mit deiner Formel:
10:21:22 Warnung Für die Ausführung dieses Projekts ist der Zugriff auf Ihr Google-Konto erforderlich. Versuchen Sie es bitte noch einmal und erlauben Sie diesmal den Zugriff.
Es wäre schön, wenn du mir helfen könntest.
Danke schön.
LG Anne
Hi Chris,
ich bin mit Scripen noch wenig vertraut, komme mit Formeln jeglicher Art in Tabellen etc aber gut zurecht.
Ich habe Dein obiges Script für meinen Bedarf wie folgt ein wenig geändert und hoffe, das geht so in Ordnung:
function Arbeitszeit(){
var ss=SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Arbeitszeit");
var now=new Date();
// Startzeit
var startZeitpunkt=new Date(ss.getRange("B4").getValue());
// Endzeit
var endZeitpunkt=new Date(ss.getRange("B5").getValue());
var events=CalendarApp.getCalendarById("XXXXXXXmeinKalenderXXXXX@group.calendar.google.com").getEvents(startZeitpunkt, endZeitpunkt);
var startZeile=6;
ss.getRange(("B"+startZeile)+(":G"+ss.getLastRow()+1)).setValue("");
if(events.length>0){
for (var i=0;i6;(I6-0,5);I6)". Und am Ende sollen natürlich ganz unten die Werte Spalte 10 summiert angegeben werden (Brutto-Arbeitsstunden) und auch die Werte der Spalte 11 (Netto-Arbeitsstunden).
Ich habe zunächst diese Formeln in das Tabellendokument eingefügt und nach unten kopiert. Nachdem sich aber die größe der Tabelle mit dem gewählten Zeitraum durchaus erheblich verändern kann, ist das nur bedingt eine Lösung. Besser wäre es also, diese in Form einiger weniger Script-Zeilen in Abhängigkeit vom gewählten Zeitraum an die obigen Zeilen "ss.getRange(i+startZeile,1 – 8) …." anzufügen. Für Script-Insider sicherlich eine einfache Aufgabe, für mich allerdings noch ein holpriger Weg, weshalb ich auf Deine/Eure Hilfe hoffe (vor allem die Einbindung von Formeln in das Script erschließt sich mir noch nicht). Vielen Dank schon mal an dieser Stelle.
Hallo Chris,
Ich habe dein Skript mit Hilfe von Chat GPT so bearbeitet dass ich endlich einen Kalender in meinen Bedürfnissen darstellen kann.
Ich möchte diesen Kalender mit Hilfe meines alten IPad 3 im Vollbild an die Wand, bzw. an den Kühlschrank, bringen.
ich bekomme das einfach nicht hin. Ich habe versucht die fertig konfigurierte Tabelle als HTML Datei frei zu geben. Das funktioniert aber die Schriften werden nicht dargestellt. Das Einbetten hat nicht funktioniert. Ich habe keinen HTML Surfer wo ich das hochladen kann. Ich will das lokal lösen.
Dann dachte ich ich könnte die Tabelle als Verknüpfung In Google Präsentationen im Präsentationsmodus auch wieder als HTML Datei darstellen. Das hat geklappt, die Tabelle sieht gut aus und ist ordentlich formatiert. Die Verknüpfung aktualisiert sich aber nicht automatisch, selbst wenn ich die Präsentation neu lade. Ich muss die Verknüpfung immer mit der Hand aktualisieren. Das hilft mir aber nicht.
Die Schriftarten sind Google Fonts, ich habe keinen Weg gefunden Sie einzubetten.
Es gibt nur eine Möglichkeit Die Tabelle in die Präsentation einzufügen das sie sich aktualisiert und zwar so:
Man erstellt aus der Tabelle ein Diagramm und stellt das dann wieder als Tabelle dar, aber dann verliert die Tabelle ihre komplette Formatierung.
Ich hoffe du oder die Community kann mir helfen.
Viele Grüße Thomas