# Bestanden aanmaken en bewerken in Drive met Apps Script Bestanden aanmaken en bewerken in Google Drive met Apps Script geeft je controle over je documentstroom. Je kunt mappen opzetten, bestanden genereren, kopieren, verplaatsen en deelrechten beheren, allemaal vanuit code. In dit artikel leer je de belangrijkste `DriveApp`-handelingen waarmee je archivering en bestandsbeheer automatiseert. [[TOC]] ## Een bestand aanmaken De eenvoudigste actie is een tekstbestand maken met `createFile()`. Je geeft een naam en de inhoud mee: ```javascript function maakTekstbestand() { const bestand = DriveApp.createFile('logboek.txt', 'Eerste regel van het logboek.'); Logger.log('Bestand gemaakt: ' + bestand.getUrl()); } ``` Het bestand belandt in de hoofdmap van je Drive. Wil je het elders, dan maak je het in een specifieke map (zie verderop). :::info title="MIME-types" Met `DriveApp.createFile()` kun je ook bestanden met een specifiek type maken via een blob. Bijvoorbeeld een HTML-bestand of een PDF. De volledige lijst MIME-types en methodes staat in de officiele Apps Script Drive-referentie op developers.google.com/apps-script/reference/drive. ::: ## Mappen maken en bestanden ordenen Structuur breng je aan met mappen. Je maakt een map en plaatst er bestanden in: ```javascript function maakMapMetBestand() { const map = DriveApp.createFolder('Rapportages 2026'); const bestand = map.createFile('mei.txt', 'Rapport van mei.'); Logger.log('Bestand staat in map ' + map.getName()); } ``` `map.createFile()` plaatst het bestand direct in die map, zodat je niet apart hoeft te verplaatsen. ## Bestanden zoeken Om een bestaand bestand te bewerken, moet je het eerst vinden. Op naam zoeken doe je met `getFilesByName()`, dat een iterator teruggeeft: ```javascript function zoekOpNaam() { const bestanden = DriveApp.getFilesByName('logboek.txt'); while (bestanden.hasNext()) { const bestand = bestanden.next(); Logger.log('Gevonden: ' + bestand.getUrl()); } } ``` Voor geavanceerder zoeken gebruik je `searchFiles()` met een query, bijvoorbeeld op type of wijzigingsdatum: ```javascript function zoekPdfs() { const query = 'mimeType = "application/pdf" and modifiedDate > "2026-05-01"'; const bestanden = DriveApp.searchFiles(query); while (bestanden.hasNext()) { Logger.log(bestanden.next().getName()); } } ``` :::warn title="Let op de query-syntax" `DriveApp.searchFiles()` gebruikt de query-taal van Drive API v2. Schrijf daarom `modifiedDate` (en niet `modifiedTime`, dat hoort bij v3). Een verkeerd veldnaam levert geen fout op maar gewoon geen resultaten, dus dit is een veelvoorkomende valkuil. ::: :::tip title="Werk met de iterator" Een iterator (`hasNext`/`next`) lijkt omslachtig, maar voorkomt dat Drive duizenden bestanden tegelijk in het geheugen laadt. Verwerk bestanden een voor een binnen de while-loop, dan blijft je script snel en stabiel, ook bij grote mappen. ::: ## Inhoud bewerken en bestanden kopieren De tekstinhoud van een bestand wijzig je met `setContent()`. Een bestand kopieren doe je met `makeCopy()`: ```javascript function bewerkEnKopieer() { const bestand = DriveApp.getFilesByName('logboek.txt').next(); bestand.setContent('Nieuwe inhoud, oude is overschreven.'); const kopie = bestand.makeCopy('logboek-backup.txt'); Logger.log('Kopie gemaakt: ' + kopie.getUrl()); } ``` :::warn title="setContent werkt alleen op tekstbestanden" `setContent()` overschrijft de inhoud van een bestand als platte tekst. Het werkt dus op tekstbestanden zoals `.txt`, `.csv` of `.html`, maar niet op Google Docs, Sheets of binaire bestanden. Wil je een Google Doc programmatisch aanpassen, gebruik dan de DocumentApp- of de Docs API-service. ::: ## Deelrechten beheren Een belangrijk gebruik is het beheren van wie toegang heeft. Je voegt bewerkers of lezers toe en stelt de algemene toegang in: ```javascript function deelBestand() { const bestand = DriveApp.getFilesByName('rapport.txt').next(); bestand.addEditor('collega@cloud-captains.com'); bestand.addViewer('extern@klant.nl'); bestand.setSharing(DriveApp.Access.DOMAIN_WITH_LINK, DriveApp.Permission.VIEW); } ``` :::warn title="Pas op met openbaar delen" Wees voorzichtig met `setSharing(DriveApp.Access.ANYONE_WITH_LINK, ...)`. Daarmee maak je een bestand openbaar voor iedereen met de link, ook buiten je organisatie. Gebruik bij voorkeur `DOMAIN_WITH_LINK` zodat alleen je eigen Workspace-domein toegang heeft, en deel met externen alleen gericht op naam. ::: ## Een maandelijks archief opzetten Een veelgebruikt patroon is een script dat elke maand netjes archiveert in een vaste mapstructuur. De stappen hieronder vormen de kern. :::howto title="Zo zet je een maandelijks archief op" 1. Zoek met `getFoldersByName()` of de jaarmap bestaat, en maak hem anders aan met `createFolder()`. 2. Maak in de jaarmap een maandmap met `createFolder()`. 3. Genereer of kopieer de relevante bestanden in die maandmap met `createFile()` of `makeCopy()`. 4. Stel de juiste deelrechten in met `addEditor()` of `setSharing()`. 5. Log de URL van de maandmap met `getUrl()` zodat collega's hem terugvinden. ::: Koppel dit script aan een tijdgestuurde trigger (bijvoorbeeld de eerste van de maand) en de archivering loopt volledig automatisch. ## Combineren met andere diensten Drive-automatisering komt het best tot zijn recht in combinatie met andere services. Genereer bijvoorbeeld een PDF en sla die op in een maandmap, zie [[apps-script-pdf-genereren|automatisch PDF-documenten genereren]]. Of stuur een gegenereerd bestand als bijlage mee, zie [[apps-script-email-sturen|e-mails versturen via Gmail]]. :::faq ### Waar belandt een nieuw bestand standaard? In de hoofdmap (root) van je Drive, tenzij je het via `map.createFile()` direct in een specifieke map maakt. ### Hoe verplaats ik een bestand naar een map? Gebruik `bestand.moveTo(map)` in de moderne API. De oudere methodes `addToFolder` en `removeFromFolder` zijn afgeraden. ### Kan ik een bestand permanent verwijderen? Met `bestand.setTrashed(true)` gooi je het in de prullenbak. Permanent verwijderen kan via de geavanceerde Drive-service (Advanced Drive Service). ### Hoe vind ik het id van een bestand? Met `bestand.getId()`. Dat id gebruik je later om het bestand direct te openen met `DriveApp.getFileById()`, wat sneller is dan op naam zoeken. ### Waarom geeft searchFiles geen resultaten op datum? Waarschijnlijk gebruik je `modifiedTime` in plaats van `modifiedDate`. DriveApp werkt met de Drive API v2 query-syntax, dus de juiste veldnaam is `modifiedDate`. ### Werkt dit ook op een gedeelde Drive (Shared Drive)? Ja, maar je hebt er voldoende rechten voor nodig. Items op een gedeelde Drive open je het makkelijkst via hun id met `getFileById()` of `getFolderById()`. :::