# Wekelijks statusrapport automatiseren met Apps Script [[TOC]] Een wekelijks statusrapport dat je elke keer handmatig samenstelt kost onnodig tijd. Met Google Apps Script automatiseer je dit volledig: het script leest je data, bouwt een nette e-mail en verstuurt die op een vast moment, zonder dat je er omkijken naar hebt. ## De voorbereiding: een statussheet aanmaken Begin met een Google Sheet die de data voor het rapport bevat. Een eenvoudige opzet voor een wekelijks projectstatusrapport ziet er zo uit: | Taak | Verantwoordelijke | Status | Deadline | |------|-------------------|--------|----------| | Offerte versturen | Sanne | Groen | 2026-06-05 | | Migratie afronden | Joost | Oranje | 2026-06-12 | | Bug in login | Amira | Rood | 2026-06-03 | Houd de sheet wekelijks bij. Het script leest de data en kan filteren op status of deadline. Geef het tabblad een duidelijke naam, bijvoorbeeld `Status`, want daar verwijst het script straks naar. ## Een Apps Script-project aanmaken :::howto title="Apps Script-project openen" 1. Open de Google Sheet die je wilt gebruiken. 2. Ga naar **Extensies > Apps Script**. 3. Een nieuw scriptproject opent in de browser. 4. Verwijder de voorbeeldcode en plak je eigen functie. ::: ## Het script schrijven Hieronder staat een basisscript dat de data uit het tabblad leest, een gekleurde HTML-tabel bouwt en die per e-mail verstuurt: ```javascript function stuurWekelijksRapport() { const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Status'); const data = sheet.getDataRange().getValues(); const headers = data[0]; const rows = data.slice(1); let htmlBody = '
| ' + h + ' | ').join('') + '
|---|
| ' + cel + ' | ').join(''); htmlBody += '
Automatisch gegenereerd op ' + new Date().toLocaleDateString('nl-NL') + '
'; GmailApp.sendEmail( 'jouw@bedrijf.nl', 'Wekelijks statusrapport ' + new Date().toLocaleDateString('nl-NL'), 'Bekijk het rapport in de HTML-versie van deze e-mail.', { htmlBody: htmlBody } ); } ``` Vervang `'Status'` door de naam van jouw tabblad en `'jouw@bedrijf.nl'` door het ontvangeradres. De derde parameter is de platte-tekstversie die zichtbaar is in e-mailclients die geen HTML tonen. :::tip title="Test eerst handmatig" Klik in de editor op **Uitvoeren** en kies `stuurWekelijksRapport`. Zo controleer je of de e-mail klopt voordat je een trigger instelt. De eerste keer vraagt Apps Script om toestemming voor Gmail en Sheets. Die verleen je eenmalig. ::: ## Een tijdgestuurde trigger instellen Het script handmatig uitvoeren is nog geen automatisering. Met een tijdgestuurde trigger draait het script op een vast moment, ook als je zelf niet bent ingelogd. :::howto title="Wekelijkse trigger toevoegen" 1. Klik in de Apps Script-editor links op het klokpictogram (**Triggers**). 2. Klik rechtsonder op **Trigger toevoegen**. 3. Kies bij de functie `stuurWekelijksRapport`. 4. Kies als gebeurtenisbron **Tijdgestuurd**. 5. Kies **Week-timer**, selecteer **Elke vrijdag** en het gewenste tijdvak. 6. Klik op **Opslaan**. ::: Apps Script kiest binnen het gekozen tijdvak (bijvoorbeeld 8 tot 9 uur) zelf het exacte moment, dus reken niet op een verzending op de seconde nauwkeurig. ## Foutafhandeling toevoegen Een robuust script vangt fouten op en laat het je weten, in plaats van stilzwijgend niets te doen: ```javascript function stuurWekelijksRapport() { try { const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Status'); if (!sheet) throw new Error('Tabblad "Status" niet gevonden'); // bouw en verstuur het rapport zoals hierboven } catch (e) { GmailApp.sendEmail( 'beheerder@bedrijf.nl', 'Fout in wekelijks rapport-script', 'Het script is mislukt. Foutmelding: ' + e.message ); } } ``` Zo krijg je een melding zodra er iets misgaat, bijvoorbeeld als iemand het tabblad heeft hernoemd. :::warn title="Let op de e-maillimiet" Apps Script kent een dagelijkse verzendlimiet. Voor een gratis Gmail-account ligt die op ongeveer 100 ontvangers per dag, voor een Google Workspace-account op ongeveer 1.500 ontvangers per dag. Elke geadresseerde telt apart mee. Voor een wekelijks rapport naar een handvol collega's zit je hier ruim onder, maar houd er rekening mee als je naar grote lijsten verstuurt. ::: ## Uitbreidingen Zodra de basis werkt, kun je het rapport uitbreiden: - Filter op taken met een deadline in de komende week, zodat alleen het relevante in de mail komt. - Voeg per status een telling toe, bijvoorbeeld "3 groen, 2 oranje, 1 rood". - Stuur het rapport als PDF-bijlage mee door eerst een bestand in Drive te genereren. - Lees data uit meerdere tabbladen voor een gecombineerd rapport over verschillende teams. :::faq ### Kan ik het rapport naar meerdere personen sturen? Ja. Geef in de eerste parameter een komma-gescheiden lijst op, bijvoorbeeld `'collega1@bedrijf.nl, collega2@bedrijf.nl'`. Wil je iemand in CC zetten, voeg dan `cc` toe aan het optie-object: `{ htmlBody: htmlBody, cc: 'manager@bedrijf.nl' }`. ### Waarom is mijn e-mail leeg of zonder opmaak? Controleer of je `htmlBody` meegeeft in het optie-object en of de variabele daadwerkelijk HTML bevat. De derde parameter van `GmailApp.sendEmail` is de platte-tekstversie; de opmaak komt uit `htmlBody`. Een lege tabel duidt meestal op een verkeerde tabbladnaam bij `getSheetByName`. ### Loopt de trigger ook als mijn computer uitstaat? Ja. Tijdgestuurde triggers draaien op de servers van Google, los van jouw apparaat. Het script gebruikt de rechten van het account dat de trigger heeft aangemaakt. ### Hoe stop of pauzeer ik de automatische verzending? Open in de editor opnieuw het klokpictogram (**Triggers**), zoek de trigger in de lijst en verwijder die via het menu met de drie puntjes. Het script zelf blijft staan en kun je later opnieuw koppelen. ### Mijn rapport komt niet binnen, wat nu? Kijk eerst in de map **Uitvoeringen** (het lijstpictogram) of het script foutloos draaide. Controleer daarna je spamfolder en of het ontvangeradres klopt. Loop je tegen de dagelijkse e-maillimiet aan, dan slaagt de verzending pas de volgende dag weer. :::