Overzicht van CalendarApp
CalendarApp is de Apps Script-service voor Google Agenda. Je kunt er evenementen mee aanmaken, bijwerken, verwijderen en opvragen. Ook terugkerende evenementen, herinneringen en het beheren van meerdere agenda's vallen binnen de mogelijkheden.
const agenda = CalendarApp.getDefaultCalendar();
const agendaNaam = agenda.getName();
const agendaId = agenda.getId();
Logger.log(`${agendaNaam}: ${agendaId}`);
CalendarApp werkt op je eigen agenda en op agenda's waarop je voldoende rechten hebt. Voor toegang tot agenda's van andere gebruikers heb je domeingekoppelde delegatie of de Calendar Advanced Service nodig.
Evenementen aanmaken
Het vierde argument van createEvent() is een opties-object. Geef sendInvites: true mee als gasten direct een uitnodiging moeten ontvangen, want standaard gebeurt dat niet.
function maakEvenementAan() {
const agenda = CalendarApp.getDefaultCalendar();
const start = new Date('2026-07-01T10:00:00');
const einde = new Date('2026-07-01T11:30:00');
const evenement = agenda.createEvent(
'Teamvergadering',
start,
einde,
{
description: 'Kwartaalevaluatie Q2 2026',
location: 'Vergaderruimte A, Amsterdam',
guests: 'collega1@bedrijf.nl,collega2@bedrijf.nl',
sendInvites: true,
}
);
Logger.log(`Aangemaakt: ${evenement.getId()}`);
}
Tijdzones expliciet beheren
CalendarApp gebruikt standaard de tijdzone van het script. Werk je met gebruikers in verschillende tijdzones, gebruik dan Session.getScriptTimeZone() samen met Utilities.formatDate() zodat datums voorspelbaar blijven.
Terugkerende evenementen
Voor herhalende afspraken gebruik je newRecurrence() om een patroon te bouwen en createEventSeries() om de reeks aan te maken. Het voorbeeld hieronder maakt een wekelijkse afspraak op maandag en donderdag.
function terugkerendEvenement() {
const agenda = CalendarApp.getDefaultCalendar();
const herhaling = CalendarApp.newRecurrence()
.addWeeklyRule()
.onlyOnWeekdays([CalendarApp.Weekday.MONDAY, CalendarApp.Weekday.THURSDAY])
.until(new Date('2026-12-31'));
const start = new Date('2026-07-07T09:00:00');
const einde = new Date('2026-07-07T09:30:00');
agenda.createEventSeries('Wekelijkse standup', start, einde, herhaling);
}
Evenementen opvragen en filteren
getEvents() haalt alle evenementen op tussen een begin- en einddatum. Met de optie search filter je op een trefwoord in titel, beschrijving of locatie.
function zoekEvenementen() {
const agenda = CalendarApp.getDefaultCalendar();
const vandaag = new Date();
const volgendeWeek = new Date();
volgendeWeek.setDate(vandaag.getDate() + 7);
const evenementen = agenda.getEvents(vandaag, volgendeWeek);
evenementen.forEach(ev => {
Logger.log(`${ev.getTitle()} | ${ev.getStartTime()} | Gasten: ${ev.getGuestList().length}`);
});
const gevonden = agenda.getEvents(vandaag, volgendeWeek, {search: 'vergadering'});
Logger.log(`Vergaderingen gevonden: ${gevonden.length}`);
}
Evenementen bijwerken en verwijderen
Haal een bestaand evenement op met getEventById() en pas het daarna aan. Controleer altijd of het evenement bestaat voordat je methodes erop aanroept, want getEventById() geeft null terug bij een onbekende of verwijderde id.
function wijzigEvenement() {
const evenementId = 'abc123_20260701T090000Z';
const evenement = CalendarApp.getEventById(evenementId);
if (!evenement) {
Logger.log('Evenement niet gevonden');
return;
}
evenement.setTitle('Bijgewerkte vergadering');
evenement.setDescription('Nieuwe beschrijving');
evenement.setLocation('Online via Meet');
const nieuweStart = new Date('2026-07-01T11:00:00');
const nieuwEinde = new Date('2026-07-01T12:00:00');
evenement.setTime(nieuweStart, nieuwEinde);
}
function verwijderEvenement() {
const evenement = CalendarApp.getEventById('EVENEMENT_ID');
if (evenement) {
evenement.deleteEvent();
}
}
Gasten en RSVP beheren
Met getGuestList() krijg je per gast het e-mailadres en de RSVP-status (bijvoorbeeld ja, nee of misschien).
function beheerGasten() {
const evenement = CalendarApp.getEventById('EVENEMENT_ID');
evenement.addGuest('nieuwegast@bedrijf.nl');
evenement.removeGuest('oudegast@bedrijf.nl');
const gasten = evenement.getGuestList();
gasten.forEach(gast => {
const status = gast.getGuestStatus();
const email = gast.getEmail();
Logger.log(`${email}: ${status}`);
});
}
Andere agenda's beheren
Naast je standaardagenda kun je gedeelde of secundaire agenda's benaderen op naam of op id.
function andereAgendas() {
const agendas = CalendarApp.getAllCalendars();
agendas.forEach(a => Logger.log(a.getName()));
const teams = CalendarApp.getCalendarsByName('Teams Agenda');
const gedeeld = CalendarApp.getCalendarById('AGENDA_ID@group.calendar.google.com');
if (gedeeld) {
const nu = new Date();
const morgen = new Date();
morgen.setDate(nu.getDate() + 1);
const ev = gedeeld.getEvents(nu, morgen);
Logger.log(`Evenementen vandaag: ${ev.length}`);
}
}
Herinneringen instellen
Je kunt per evenement meerdere herinneringen toevoegen, zowel via e-mail als via een pop-up. De waarde is het aantal minuten voor aanvang.
function stelHerinneringen() {
const agenda = CalendarApp.getDefaultCalendar();
const start = new Date('2026-07-15T14:00:00');
const einde = new Date('2026-07-15T15:00:00');
const evenement = agenda.createEvent('Deadline presentatie', start, einde);
evenement.addEmailReminder(60);
evenement.addEmailReminder(1440);
evenement.addPopupReminder(15);
evenement.removeAllReminders();
evenement.addPopupReminder(30);
}
Google Meet-links toevoegen
CalendarApp zelf heeft geen methode om een conferentie aan een evenement te koppelen. Wil je automatisch een Google Meet-link aanmaken, dan gebruik je de Calendar Advanced Service. Schakel die in via Services in de editor, en geef bij het aanmaken van het evenement een conferenceData-blok mee met conferenceDataVersion: 1.
function evenementMetMeet() {
const agendaId = 'primary';
const event = {
summary: 'Overleg met Meet',
start: { dateTime: '2026-07-20T10:00:00', timeZone: 'Europe/Amsterdam' },
end: { dateTime: '2026-07-20T11:00:00', timeZone: 'Europe/Amsterdam' },
conferenceData: {
createRequest: {
requestId: Utilities.getUuid(),
conferenceSolutionKey: { type: 'hangoutsMeet' },
},
},
};
const aangemaakt = Calendar.Events.insert(event, agendaId, { conferenceDataVersion: 1 });
Logger.log(aangemaakt.hangoutLink);
}
Calendar Advanced Service eerst inschakelen
Calendar.Events.insert werkt alleen als je de Calendar Advanced Service hebt toegevoegd via Services in de Apps Script-editor. Zonder die service krijg je een foutmelding dat Calendar niet gedefinieerd is.
Vergaderplanning automatiseren vanuit een formulier
- Koppel een Google Formulier met velden Naam, E-mail, Gewenste datum en Onderwerp.
- Maak een
onFormSubmit-trigger die de formulierinzending verwerkt. - Parseer de datum uit het antwoord naar een JavaScript
Date-object. - Maak een evenement aan met
CalendarApp.getDefaultCalendar().createEvent(). - Voeg de inzender toe als gast met
evenement.addGuest(email). - Stuur een bevestiging met
GmailApp.sendEmail()inclusief de evenement-link.
Agenda-automatisering met triggers combineren
De kracht van CalendarApp zit in de combinatie met triggers. Gebruik newRecurrence() voor terugkerende patronen en koppel een tijdgestuurde trigger om agenda-data te synchroniseren met andere systemen, zoals een CRM of projectmanagementtool.
Een populair patroon is het automatisch aanmaken van afspraken vanuit een formulier of spreadsheet, eventueel met een Google Meet-link via de Calendar Advanced Service zoals hierboven. Houd er rekening mee dat Apps Script quota's heeft voor het aantal aangemaakte evenementen per dag, dus verwerk grote batches gespreid of in een tijdgestuurde trigger.
Kan ik evenementen in de agenda van een andere gebruiker aanmaken?
Dat kan alleen als je domeingekoppelde delegatie hebt via de Admin SDK of als de agenda met je gedeeld is met bewerkrechten. Persoonlijke agenda's van collega's zijn standaard niet toegankelijk via CalendarApp.
Hoe maak ik een evenement dat de hele dag duurt?
Gebruik createAllDayEvent(titel, datum) voor een enkel evenement of createAllDayEventSeries() voor een terugkerende reeks die de hele dag beslaat.
Waarom worden mijn uitnodigingen niet verstuurd?
Standaard stuurt createEvent() geen uitnodigingen. Geef sendInvites: true mee in het opties-object om gasten direct te laten informeren.
Hoe voeg ik automatisch een Google Meet-link toe?
CalendarApp heeft daar geen ingebouwde methode voor. Gebruik de Calendar Advanced Service en geef een conferenceData-blok mee met conferenceDataVersion: 1, zoals in het voorbeeld in dit artikel.
Hoe synchroniseer ik een spreadsheet met agenda-evenementen?
Lees evenementen op met getEvents(), bewaar de evenement-id per rij in de spreadsheet en gebruik die id daarna voor updates via getEventById().
Loop ik tegen limieten aan bij veel evenementen?
Ja, Apps Script kent dagelijkse quota's voor onder meer het aantal aangemaakte agenda-evenementen. Verwerk grote aantallen gespreid via een tijdgestuurde trigger en bouw foutafhandeling in.