DriveApp basis
DriveApp geeft je toegang tot Google Drive vanuit Apps Script. Je kunt bestanden aanmaken, lezen, verplaatsen, kopieren en verwijderen. Ook het delen van bestanden en mappen en het instellen van machtigingen valt binnen de service.
const root = DriveApp.getRootFolder();
Logger.log(root.getName());
const bestand = DriveApp.getFileById('BESTAND_ID');
Logger.log(bestand.getName());
Logger.log(bestand.getMimeType());
Logger.log(bestand.getSize());
Vraag alleen de scope die je nodig hebt
DriveApp vraagt standaard volledige Drive-toegang. Wil je je script beperken tot bestanden die het zelf aanmaakt, gebruik dan de scope https://www.googleapis.com/auth/drive.file. Zet die expliciet in je appsscript.json onder oauthScopes om onnodig brede rechten te voorkomen.
Bestanden aanmaken en opslaan
function maakBestanden() {
const map = DriveApp.getFolderById('MAP_ID');
const tekstbestand = map.createFile('notities.txt', 'Inhoud hier', MimeType.PLAIN_TEXT);
const blob = Utilities.newBlob('{"sleutel":"waarde"}', MimeType.JSON, 'data.json');
const jsonBestand = map.createFile(blob);
const spreadsheet = SpreadsheetApp.create('Nieuw rapport');
const ssBestand = DriveApp.getFileById(spreadsheet.getId());
ssBestand.moveTo(map);
}
Mappen beheren
function beheerMappen() {
const root = DriveApp.getRootFolder();
const nieuwMap = root.createFolder('Projecten 2026');
const submap = nieuwMap.createFolder('Q3');
const submappen = nieuwMap.getFolders();
while (submappen.hasNext()) {
const sm = submappen.next();
Logger.log(sm.getName());
}
const bestanden = nieuwMap.getFiles();
while (bestanden.hasNext()) {
Logger.log(bestanden.next().getName());
}
}
Werk altijd met de iterator-controle
DriveApp gebruikt iterator-objecten voor bestanden en mappen. Controleer altijd met hasNext() voordat je next() aanroept, anders krijg je een runtime-fout zodra de iterator leeg is.
Zoeken in Drive
function zoekInDrive() {
const zoekresultaten = DriveApp.searchFiles(
'mimeType = "application/pdf" and title contains "factuur" and trashed = false'
);
while (zoekresultaten.hasNext()) {
const bestand = zoekresultaten.next();
Logger.log(`${bestand.getName()} - ${bestand.getLastUpdated()}`);
}
const mapResultaten = DriveApp.searchFolders('title contains "Archief"');
while (mapResultaten.hasNext()) {
Logger.log(mapResultaten.next().getName());
}
}
De zoeksyntax van DriveApp volgt de Drive API v2 query-syntax, niet v3. Dat is een veelgemaakte fout: in v2 heten de velden title en modifiedDate, terwijl v3 name en modifiedTime gebruikt. Schrijf je name contains in een DriveApp-query, dan krijg je geen resultaten. Veelgebruikte velden zijn mimeType, title, modifiedDate, owners, parents en trashed.
Escape quotes in je zoekstring
Bevat je zoekterm een apostrof of dubbele quote, escape die dan correct. Bijvoorbeeld: 'title contains "Q\'s rapport"'. Een niet-geescapete quote breekt de hele query stilletjes.
Bestandsrechten instellen
function stelRechtenIn() {
const bestand = DriveApp.getFileById('BESTAND_ID');
bestand.addViewer('lezer@voorbeeld.nl');
bestand.addEditor('bewerker@voorbeeld.nl');
bestand.setSharing(
DriveApp.Access.ANYONE_WITH_LINK,
DriveApp.Permission.VIEW
);
bestand.removeViewer('oudelezer@voorbeeld.nl');
const delers = bestand.getEditors();
delers.forEach(d => Logger.log(d.getEmail()));
}
ANYONE_WITH_LINK deelt breder dan je denkt
DriveApp.Access.ANYONE_WITH_LINK maakt het bestand toegankelijk voor iedereen met de link, ook buiten je organisatie. Gebruik voor interne bestanden liever DriveApp.Access.DOMAIN_WITH_LINK of deel gericht per e-mailadres. Controleer dit altijd voordat je gevoelige data deelt.
Bestanden kopieren en verplaatsen
function kopierenEnVerplaatsen() {
const bestand = DriveApp.getFileById('BRON_ID');
const doelmap = DriveApp.getFolderById('DOEL_MAP_ID');
const kopie = bestand.makeCopy('Kopie - ' + bestand.getName(), doelmap);
bestand.moveTo(doelmap);
bestand.setTrashed(true);
}
Bestanden exporteren als andere formaten
function exporteerAlsPdf() {
const spreadsheet = SpreadsheetApp.openById('SPREADSHEET_ID');
const pdf = spreadsheet.getAs(MimeType.PDF);
pdf.setName('rapport.pdf');
const map = DriveApp.getFolderById('MAP_ID');
const pdfBestand = map.createFile(pdf);
Logger.log(pdfBestand.getUrl());
}
function exporteerDocAlsWord() {
const doc = DriveApp.getFileById('DOC_ID');
const blob = doc.getAs('application/vnd.openxmlformats-officedocument.wordprocessingml.document');
blob.setName('document.docx');
DriveApp.createFile(blob);
}
Drive-activiteit monitoren
function monitorBestanden() {
const map = DriveApp.getFolderById('MAP_ID');
const grens = new Date();
grens.setDate(grens.getDate() - 1);
const bestanden = map.getFiles();
const recent = [];
while (bestanden.hasNext()) {
const b = bestanden.next();
if (b.getLastUpdated() > grens) {
recent.push({naam: b.getName(), bijgewerkt: b.getLastUpdated()});
}
}
Logger.log(`Recent bijgewerkt: ${recent.length} bestanden`);
}
Maandelijkse back-up van spreadsheets als PDF
- Zoek naar alle spreadsheets in een specifieke map met
DriveApp.searchFiles('mimeType = "application/vnd.google-apps.spreadsheet" and trashed = false'). - Open elke spreadsheet met
SpreadsheetApp.openById()en exporteer als PDF metgetAs(MimeType.PDF). - Maak een doelmap aan voor de maand met
rootMap.createFolder(maandnaam). - Sla elk PDF-bestand op in de nieuwe map met
doelmap.createFile(pdf). - Stuur een samenvatting per e-mail met
GmailApp.sendEmail().
Hoe krijg ik de URL van een bestand?
Gebruik bestand.getUrl() voor de bewerkbare URL of bestand.getDownloadUrl() voor een directe downloadlink. Beide methoden zijn nog steeds beschikbaar in 2026.
Kan ik bestanden uploaden vanuit een externe URL?
Ja. Haal de data op met UrlFetchApp.fetch(url).getBlob() en sla die op met DriveApp.createFile(blob). Houd er rekening mee dat de externe URL publiek bereikbaar moet zijn.
Waarom geeft mijn searchFiles-query geen resultaten?
Waarschijnlijk gebruik je v3-veldnamen. DriveApp werkt met de Drive API v2-syntax: gebruik title in plaats van name en modifiedDate in plaats van modifiedTime.
Hoe verplaats ik een bestand van een gedeelde drive naar Mijn Drive?
Gebruik bestand.moveTo(doelmap). Dit werkt ook cross-drive zolang je voldoende machtigingen hebt op zowel de bron- als de doellocatie.
Wat is het maximale bestandsformaat dat ik kan aanmaken?
Voor niet-Google formaten geldt een limiet van 5 TB per bestand. Voor Blob-operaties in Apps Script geldt een praktische limiet van ongeveer 50 MB door geheugenrestricties van de runtime.
Hoe voorkom ik een time-out bij veel bestanden?
Apps Script heeft een maximale uitvoeringstijd per run (rond de 6 minuten op consumentenaccounts). Verwerk grote hoeveelheden bestanden in batches en gebruik een time-driven trigger met een voortgangsmarkering in PropertiesService om verder te gaan waar je gebleven was.
De DriveApp service is bijzonder krachtig in combinatie met andere services. Door bestanden te exporteren als Blob en door te geven aan GmailApp of terug te schrijven naar Drive, automatiseer je complete documentworkflows zonder externe tools.