Naar inhoud
lightbulb Welkom op de nieuwe kennisbank | We hebben de docs volledig vernieuwd met meer dan 160 features. Bekijk wat nieuw isarrow_forward

DriveApp service in Apps Script

Beheer bestanden en mappen in Google Drive vanuit Apps Script met DriveApp: uploaden, zoeken, delen, exporteren en organiseren.

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());
lightbulb

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());
  }
}
warning

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.

lightbulb

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()));
}
warning

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

  1. Zoek naar alle spreadsheets in een specifieke map met DriveApp.searchFiles('mimeType = "application/vnd.google-apps.spreadsheet" and trashed = false').
  2. Open elke spreadsheet met SpreadsheetApp.openById() en exporteer als PDF met getAs(MimeType.PDF).
  3. Maak een doelmap aan voor de maand met rootMap.createFolder(maandnaam).
  4. Sla elk PDF-bestand op in de nieuwe map met doelmap.createFile(pdf).
  5. 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.