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

Grafieken aanmaken met Apps Script

Maak en pas grafieken aan in Google Sheets via Apps Script: lijn-, staaf-, taart- en spreidingsgrafieken aanmaken, bijwerken en exporteren als afbeelding.

Grafieken in Apps Script

Apps Script biedt een volledige API voor het aanmaken en beheren van grafieken in Google Sheets. Via de EmbeddedChartBuilder configureer je het grafiektype, de databereiken, titels, kleuren en positie. Je start altijd met blad.newChart(), kettingt de instellingen aaneen en sluit af met build().

function maakLijngrafiek() {
  const blad = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();

  const grafiek = blad.newChart()
    .setChartType(Charts.ChartType.LINE)
    .addRange(blad.getRange('A1:B20'))
    .setPosition(5, 5, 0, 0)
    .setOption('title', 'Omzet per maand')
    .setOption('hAxis.title', 'Maand')
    .setOption('vAxis.title', 'Omzet (EUR)')
    .setOption('width', 600)
    .setOption('height', 400)
    .build();

  blad.insertChart(grafiek);
}

De eerste rij van je bereik wordt standaard als kopregel gebruikt: kolom A levert de labels, de overige kolommen de meetwaarden.

Staaf- en taartgrafieken

function maakStaafgrafiek() {
  const blad = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();

  const grafiek = blad.newChart()
    .setChartType(Charts.ChartType.BAR)
    .addRange(blad.getRange('A1:C10'))
    .setPosition(20, 1, 0, 0)
    .setOption('title', 'Scores per afdeling')
    .setOption('isStacked', true)
    .setOption('colors', ['#1A73E8', '#34A853', '#FBBC04'])
    .setOption('legend.position', 'bottom')
    .build();

  blad.insertChart(grafiek);
}

function maakTaartgrafiek() {
  const blad = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();

  const grafiek = blad.newChart()
    .setChartType(Charts.ChartType.PIE)
    .addRange(blad.getRange('A1:B5'))
    .setPosition(2, 8, 0, 0)
    .setOption('title', 'Marktverdeling')
    .setOption('pieHole', 0.4)
    .setOption('width', 500)
    .setOption('height', 400)
    .build();

  blad.insertChart(grafiek);
}

De optie pieHole met een waarde tussen 0 en 1 maakt van een taartgrafiek een donutgrafiek.

info

Beschikbare grafiektypen

Via Charts.ChartType kies je onder andere uit LINE, BAR, COLUMN, PIE, SCATTER, AREA, COMBO, HISTOGRAM, TABLE en GEO. Raadpleeg de Apps Script-referentie voor het volledige overzicht en de bijbehorende opties.

Bestaande grafieken bijwerken

Een bestaande grafiek pas je aan met modify(), dat een nieuwe builder teruggeeft. De wijziging is pas definitief na updateChart().

function wijzigGrafiek() {
  const blad = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  const grafieken = blad.getCharts();

  if (grafieken.length === 0) {
    Logger.log('Geen grafieken gevonden');
    return;
  }

  const builder = grafieken[0].modify()
    .setOption('title', 'Bijgewerkte titel')
    .clearRanges()
    .addRange(blad.getRange('A1:B30'));

  blad.updateChart(builder.build());
}
warning

clearRanges() reset opties niet altijd zoals verwacht

Na clearRanges() kan de grafiek zijn vormgeving deels verliezen. Stel alle relevante opties (titel, kleuren, assen) opnieuw in op de builder voordat je build() aanroept, zodat het resultaat voorspelbaar blijft.

Grafieken verwijderen

function verwijderAlleGrafieken() {
  const blad = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  const grafieken = blad.getCharts();
  grafieken.forEach(g => blad.removeChart(g));
  Logger.log(`${grafieken.length} grafieken verwijderd`);
}

Grafiek als afbeelding exporteren

Met getAs('image/png') zet je een grafiek om in een blob. Die kun je opslaan in Drive of als bijlage versturen.

function exporteerGrafiekAlsAfbeelding() {
  const blad = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  const grafieken = blad.getCharts();

  if (grafieken.length === 0) return;

  const grafiek = grafieken[0];
  const blob = grafiek.getAs('image/png');
  blob.setName('grafiek.png');

  DriveApp.getFolderById('MAP_ID').createFile(blob);

  GmailApp.sendEmail('manager@bedrijf.nl', 'Grafiek bijgevoegd', 'Zie bijlage', {
    attachments: [blob],
  });
}
lightbulb

Insluiten in een Google Doc

Een grafiek kun je niet rechtstreeks in een Doc plaatsen, maar de PNG-blob wel. Voeg die toe met DocumentApp.getActiveDocument().getBody().appendImage(blob). Zo bouw je rapporten die de Sheets-data visueel overnemen.

Dynamische dashboard-grafieken

Bij een dashboard wil je de grafieken telkens opnieuw opbouwen op basis van de actuele data. Verwijder eerst de oude grafieken en bepaal het bereik op basis van getLastRow().

function vernieuwDashboard() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const dataBlad = ss.getSheetByName('Data');
  const dashBlad = ss.getSheetByName('Dashboard');

  dashBlad.getCharts().forEach(g => dashBlad.removeChart(g));

  const aantalRijen = dataBlad.getLastRow();

  const omzetGrafiek = dashBlad.newChart()
    .setChartType(Charts.ChartType.COLUMN)
    .addRange(dataBlad.getRange(1, 1, aantalRijen, 2))
    .setPosition(1, 1, 0, 0)
    .setOption('title', `Omzet (${aantalRijen - 1} maanden)`)
    .setOption('width', 800)
    .setOption('height', 300)
    .build();

  dashBlad.insertChart(omzetGrafiek);
}

Wekelijks een rapportagegrafiek mailen

Wekelijks rapportage-grafiek mailen

  1. Maak een time-based wekelijkse trigger via Triggers in de Apps Script-editor.
  2. Lees de actuele data uit het juiste blad met getRange() of getDataRange().
  3. Verwijder de bestaande grafieken op het dashboard-blad met getCharts() en removeChart().
  4. Maak een nieuwe grafiek aan met de bijgewerkte data en insertChart().
  5. Exporteer de grafiek als PNG met grafiek.getAs('image/png').
  6. Stuur de PNG als bijlage in een e-mail met GmailApp.sendEmail().
Hoe stel ik de grafiekpositie nauwkeurig in?

setPosition(rij, kolom, offsetX, offsetY) plaatst de grafiek relatief aan een cel. De eerste twee waarden zijn de anker-rij en anker-kolom (1-gebaseerd), de laatste twee zijn de horizontale en verticale verschuiving in pixels.

Kan ik een grafiek rechtstreeks in een Google Doc insluiten?

Niet rechtstreeks. Exporteer de grafiek als PNG-blob met getAs('image/png') en voeg die toe via DocumentApp.getActiveDocument().getBody().appendImage(blob).

Hoe maak ik een spreidingsgrafiek met twee datakolommen?

Gebruik Charts.ChartType.SCATTER met een bereik waarin kolom A de X-waarden bevat en kolom B de Y-waarden. Apps Script koppelt de eerste kolom aan de horizontale as.

Waarom ziet mijn grafiek er anders uit na een update?

Bij clearRanges() kan een deel van de vormgeving terugvallen op de standaard. Stel titel, kleuren en assen opnieuw in op de builder voordat je build() en updateChart() aanroept.

Waarom verschijnt mijn grafiek niet in de spreadsheet?

Controleer of je build() aanroept en het resultaat doorgeeft aan insertChart(). Een builder zonder build() plaatst niets, en updateChart() werkt alleen op een grafiek die al bestaat.

Hoe verander ik de kleuren van de reeksen?

Geef een lijst met hexkleuren mee via setOption('colors', ['#1A73E8', '#34A853']). De volgorde komt overeen met de volgorde van de datareeksen in je bereik.

Grafieken maken rapporten visueel aantrekkelijk en inzichtelijk. Door de generatie te automatiseren houd je je visualisaties altijd actueel zonder handmatig werk.