FormApp overzicht
FormApp geeft je volledige controle over Google Formulieren vanuit Apps Script. Je kunt formulieren aanmaken, vragen toevoegen en bewerken, antwoorden ophalen en verwerken, en triggers koppelen voor verwerking in real time.
const form = FormApp.getActiveForm();
const form2 = FormApp.openById('FORMULIER_ID');
const form3 = FormApp.openByUrl('https://docs.google.com/forms/d/FORMULIER_ID/');
getActiveForm() werkt alleen in een script dat aan een formulier gekoppeld is (container-bound). Voor standalone scripts gebruik je openById() of openByUrl().
Formulieren aanmaken en vragen toevoegen
function maakFormulier() {
const form = FormApp.create('Klantbeoordeling Q3 2026');
form.setDescription('Vul dit formulier in om ons te helpen verbeteren.');
form.setCollectEmail(true);
form.setLimitOneResponsePerUser(true);
form.addTextItem()
.setTitle('Wat is uw naam?')
.setRequired(true);
form.addMultipleChoiceItem()
.setTitle('Hoe tevreden bent u?')
.setChoiceValues(['Zeer tevreden', 'Tevreden', 'Neutraal', 'Ontevreden'])
.setRequired(true);
form.addScaleItem()
.setTitle('Hoe waarschijnlijk beveelt u ons aan? (0 tot 10)')
.setBounds(0, 10)
.setLabels('Zeer onwaarschijnlijk', 'Zeer waarschijnlijk');
form.addParagraphTextItem()
.setTitle('Heeft u nog opmerkingen?');
Logger.log(form.getPublishedUrl());
}
Itemtypes onthouden
De belangrijkste item-toevoegers zijn addTextItem() (kort tekstveld), addParagraphTextItem() (lang tekstveld), addMultipleChoiceItem() (radiokeuze), addCheckboxItem() (meerkeuze), addListItem() (dropdown), addScaleItem() (schaal) en addFileUploadItem() (bestandsupload).
Antwoorden verwerken
function verwerkAntwoorden() {
const form = FormApp.openById('FORMULIER_ID');
const antwoorden = form.getResponses();
Logger.log(`Totaal antwoorden: ${antwoorden.length}`);
antwoorden.forEach(antwoord => {
const tijdstip = antwoord.getTimestamp();
const email = antwoord.getRespondentEmail();
const itemAntwoorden = antwoord.getItemResponses();
itemAntwoorden.forEach(ia => {
const vraag = ia.getItem().getTitle();
const waarde = ia.getResponse();
Logger.log(`${vraag}: ${waarde}`);
});
});
}
E-mailadres alleen bij verzameling
getRespondentEmail() retourneert alleen een waarde als setCollectEmail(true) is ingesteld op het formulier. Anders krijg je een lege string terug.
Nieuwe antwoorden triggeren
function stelTriggerIn() {
const form = FormApp.openById('FORMULIER_ID');
ScriptApp.newTrigger('verwerkNieuwAntwoord')
.forForm(form)
.onFormSubmit()
.create();
}
function verwerkNieuwAntwoord(e) {
const antwoord = e.response;
const email = antwoord.getRespondentEmail();
const itemAntwoorden = antwoord.getItemResponses();
const samenvatting = itemAntwoorden
.map(ia => `${ia.getItem().getTitle()}: ${ia.getResponse()}`)
.join('
');
GmailApp.sendEmail(
'beheerder@bedrijf.nl',
'Nieuw formulierantwoord',
`Van: ${email}
${samenvatting}`
);
}
Trigger-quota in de gaten houden
Een onFormSubmit-trigger telt mee voor je dagelijkse Apps Script-quota voor triggers en e-mail. Bij grote volumes loop je tegen limieten aan. Verwerk dan in batch via getResponses() op een time-based trigger in plaats van per inzending.
Formulierstructuur aanpassen
function pasFormulierAan() {
const form = FormApp.openById('FORMULIER_ID');
const items = form.getItems();
items.forEach(item => {
Logger.log(`${item.getIndex()}: ${item.getTitle()} (${item.getType()})`);
});
const dropdownVraag = form.addListItem();
dropdownVraag.setTitle('Selecteer uw regio');
dropdownVraag.setChoiceValues(['Noord', 'Oost', 'Zuid', 'West']);
form.moveItem(dropdownVraag.getIndex(), 2);
items[0].setTitle('Bijgewerkte vraag');
}
Antwoorden naar Sheets exporteren
function exporteerNaarSheets() {
const form = FormApp.openById('FORMULIER_ID');
const destSheet = SpreadsheetApp.create('Formulierantwoorden Export');
form.setDestination(FormApp.DestinationType.SPREADSHEET, destSheet.getId());
Logger.log(destSheet.getUrl());
}
function leesUitGekoppeldeSheet() {
const form = FormApp.openById('FORMULIER_ID');
const sheetId = form.getDestinationId();
const sheet = SpreadsheetApp.openById(sheetId).getSheets()[0];
const data = sheet.getDataRange().getValues();
Logger.log(`Rijen in sheet: ${data.length}`);
}
Veelgebruikte FormApp-methoden
| Methode | Doel |
|---|---|
FormApp.create(titel) |
Nieuw formulier aanmaken |
FormApp.openById(id) |
Bestaand formulier openen |
form.addMultipleChoiceItem() |
Radiokeuze toevoegen |
form.getResponses() |
Alle inzendingen ophalen |
form.setDestination(...) |
Antwoorden koppelen aan een spreadsheet |
form.deleteAllResponses() |
Alle antwoorden wissen (onomkeerbaar) |
form.setAcceptingResponses(false) |
Formulier sluiten voor inzendingen |
Registratieformulier met bevestigingsmail
- Maak een formulier met
FormApp.create()en voeg naam-, e-mail- en keuze-vragen toe. - Stel e-mailcollectie in met
form.setCollectEmail(true). - Maak een
onFormSubmit-trigger metScriptApp.newTrigger(). - In de handler haal je het e-mailadres op met
e.response.getRespondentEmail(). - Genereer een bevestigingstekst op basis van
getItemResponses(). - Stuur de bevestiging met
GmailApp.sendEmail().
Hoe verwijder ik alle antwoorden uit een formulier?
Gebruik form.deleteAllResponses(). Let op: dit is onomkeerbaar en wist alle bestaande inzendingen.
Kan ik formuliervragen voorwaardelijk tonen?
Ja, via addPageBreakItem() en paginaroutering met setGoToPage() op multiple-choice items. Zo stuur je respondenten naar verschillende pagina's op basis van hun keuze.
Hoe begrens ik de inzendingsdatum van een formulier?
FormApp heeft geen ingebouwde deadline. Gebruik een time-based trigger die form.setAcceptingResponses(false) uitvoert op de gewenste datum en tijd.
Kan ik bestandsuploads verwerken vanuit een formulier?
Ja, voeg een addFileUploadItem() toe. Geüploade bestanden worden opgeslagen in Drive en zijn bereikbaar via het antwoord als Drive-bestand of url.
Werkt FormApp ook in een standalone script?
Ja. getActiveForm() werkt alleen container-bound, maar openById() en openByUrl() werken vanuit elk script zolang je toegang hebt tot het formulier.
Hoe weet ik welk itemtype een vraag heeft?
Roep item.getType() aan. Dat geeft een FormApp.ItemType terug, bijvoorbeeld MULTIPLE_CHOICE of TEXT, zodat je per type de juiste verwerking kiest.
FormApp is een krachtige service voor het bouwen van geautomatiseerde datastromen. Door formulieren te koppelen aan spreadsheets, agenda-afspraken of documentgeneratie bouw je complete selfservice-workflows zonder externe tools.