1. Livres & vidéos
  2. Google Apps Script
  3. Google Slides avec SlidesApp
Extrait - Google Apps Script Créez vos outils pour automatiser Google Workspace
Extraits du livre
Google Apps Script Créez vos outils pour automatiser Google Workspace Revenir à la page d'achat du livre

Google Slides avec SlidesApp

Introduction

Après avoir vu comment Apps Script peut automatiser Google Sheets, Forms, Drive, Gmail et Calendar, attaquons-nous à présent à Google Slides.

Google Slides est l’application web de Google qui permet de créer et de partager des présentations.

Introduction à SlidesApp

Google Slides dispose aussi de sa boîte à outils Apps Script : SlidesApp. SlidesApp met à disposition des méthodes pour créer, partager, modifier les présentations, et toute autre automatisation imaginable.

1. Présentation du service

Apps Script est accessible depuis Extensions - Apps Script. Un document Slides peut contenir son propre projet Apps Script.

images/17RI01.png

Avant de plonger dans le vif du sujet, regardons d’un peu plus près comment est structurée une présentation.

Dans un fichier Slides, on parle de présentation. Dans cette présentation se trouvent des slides (diapositives), et dans ces slides, des éléments.

Ces éléments peuvent être des titres, des formes, des vidéos, des tableaux. Apps Script nous fournit une liste exhaustive des types d’éléments à retrouver dans une page à partir de la classe PageElementType :

  • UNSUPPORTED : représente un élément de page non accepté et qui ne peut pas être classé plus précisément.

  • SHAPE : représente une forme générique qui n’a pas de classification plus spécifique.

  • IMAGE : représente une image.

  • VIDEO : représente une vidéo.

  • TABLE : représente une table.

  • GROUP : représente une collection d’éléments de page joints en une seule unité.

  • LINE : représente une ligne.

  • WORD_ART : représente du texte Word Art.

  • SHEETS_CHART : représente un graphique associé intégré à partir de Google Sheets.

  • SPEAKER_SPOTLIGHT : représente une vidéo du présentateur.

On peut accéder à une présentation Google Slides depuis Apps Script à l’aide de plusieurs méthodes :

  • getActivePresentation() pour un script lié directement à une présentation, 

  • openById() ou openByUrl()pour ouvrir une présentation existante depuis son identifiant ou son lien.

Ces méthodes renvoient une instance de la classe Presentation, à partir de laquelle il est ensuite possible de récupérer la liste des diapositives avec getSlides(), puis les éléments (zones de texte, images, formes, etc.) présents sur chaque diapositive grâce...

Automatiser et personnaliser les présentations

Jusqu’ici, nous avons vu comment créer et organiser des diapositives.

Dans cette section, nous allons voir comment remplacer du texte, mettre à jour des zones existantes, ou modifier des éléments existants.

C’est une base essentielle avant de passer au templating automatisé.

1. Remplacer des balises

Une méthode très utilisée dans SlidesApp est replaceAllText().

Elle permet de parcourir toute la présentation (ou une diapositive spécifique) et de remplacer une chaîne de caractères par une autre.

Dans la suite de ce chapitre, nous allons utiliser un modèle de Slides pour illustrer le cas d’usage.

images/17RI08.png

Certaines balises ont été ajoutées : {{WeekNumber}}, {{TotalSales}}, {{TopCity}}.

Par convention, on utilise des accolades doubles pour délimiter les balises afin d’éviter que des mots ordinaires du texte soient remplacés par erreur.

function replaceTextPlaceholders() { 
  const presentation = SlidesApp.openById("1WAMjJpZ-5ScL91M47A65-
vl7CvNIgjdok7hLc7VS1iQ"); 
 
  presentation.replaceAllText("{{WeekNumber}}", "Week 39"); 
  presentation.replaceAllText("{{TotalSales}}", "$21,350"); 
  presentation.replaceAllText("{{TopCity}}", "Sydney"); 
 
  Logger.log("Placeholders replaced successfully!"); 
} 

Chaque occurrence trouvée dans les zones de texte, titres ou formes sera remplacée.

C’est la base d’un système de modèles dynamiques.

images/17RI09.png

Le souci est que maintenant, notre présentation n’a plus de balises, il n’est donc plus possible de la personnaliser. Si l’on souhaite générer un rapport hebdomadaire, il est donc plus judicieux de créer une copie, puis de remplacer les balises.

2. Générer des rapports depuis Sheets

L’un des cas d’usage les plus puissants de SlidesApp consiste...

Techniques avancées et intégrations

1. Générer un rapport par ville

Jusqu’ici, nous avons généré un rapport global.

Voyons maintenant comment automatiser la création d’un rapport hebdomadaire pour chaque ville figurant dans la colonne City.

Le principe est le suivant :

  • On lit les données de la feuille SalesData.

  • On isole la liste des villes uniques.

  • Pour chaque ville, on crée une copie du modèle.

  • On applique un filtre sur le tableau croisé dynamique.

  • On rafraîchit le graphique lié pour refléter la ville courante.

function applyPivotFilterAndRefresh(cityName = "Sydney") { 
  const ss = SpreadsheetApp.getActiveSpreadsheet(); 
  const sheet = ss.getSheetByName("Sales surfboards"); 
  const pivot = sheet.getPivotTables()[0]; // We only have one pivot table 
 
  // --- 1. Apply a filter on the PivotTable field "City" --- 
  pivot.addFilter(2, SpreadsheetApp.newFilterCriteria() 
    .setVisibleValues([cityName]) 
    .build() 
  );
  // Save modification 
  SpreadsheetApp.flush(); 
 
  // --- 2. Refresh all linked charts in Slides --- 
  const presentation = SlidesApp.openById("1mex9MCgrAvPqitRHGOHtSCNSq4NzOtLQ4zQqr40I4RU"); 
  presentation.getSlides().forEach(slide => { 
    slide.getSheetsCharts().forEach(chart => chart.refresh()); 
  }); 
Logger.log('images/vnoir.png PivotTable filtered for ${cityName} and chart refreshed.'); 
} 

Cette méthode permet d’affiner la génération de présentations en gardant un système totalement dynamique.

images/17RI14.png

Il suffit de rajouter au processus :

applyPivotFilterAndRefresh(city); 

Attention à bien supprimer le filtre avant de passer à la ville suivante !

function resetPivotFilters(pivot) { 
  const filters = pivot.getFilters(); 
  filters.forEach(f => f.remove()); 
  SpreadsheetApp.flush(); 
} 

2. Exporter un fichier PDF (avec DriveApp)

Il est très courant...