1. Livres & vidéos
  2. Google Apps Script
  3. Google Docs avec DocumentApp
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 Docs avec DocumentApp

Introduction

Dans ce chapitre, nous allons nous concentrer sur l’automatisation au sein de Google Docs. Docs est l’application de traitement de texte basée sur le cloud de Google. Comme Google Sheets, Slides et Forms, Docs peut être automatisé avec Apps Script.

Introduction à DocumentApp

DocumentApp est le service natif Apps Script pour manipuler des fichiers Google Docs côté serveur. Il expose un modèle d’objets hiérarchiques (Document > Body > Paragraph/Text, Table, ListItem, InlineImage…) et des méthodes simples pour écrire, insérer, mettre en forme et naviguer dans le contenu.

1. Présentation du service

Apps Script est accessible, comme d’habitude, depuis Extensions, puis Apps Script. Un fichier Google Docs peut être l’hôte d’un projet Apps Script.

images/18RI01.png

Avant d’entrer dans les techniques d’automatisation, il est utile de préciser comment un document Google Docs est structuré. Dans un fichier Docs, on manipule un document dont le contenu principal se trouve dans la partie Body

À l’intérieur de ce Body, le contenu est organisé sous forme d’éléments : paragraphes, titres, éléments de liste, tableaux, images en ligne, liens, notes de bas de page, signets, table des matières. Des sections d’en-tête et de pied de page peuvent également être présentes pour des éléments récurrents comme un logo, une mention légale ou une pagination.

On peut accéder à un document à partir des méthodes de DocumentApp :

  • getActiveDocument() : pour les projets liés à un Google Docs.

  • openById() : à partir de l’ID du fichier.

  • openByUrl() : à partir de l’URL du fichier.

On peut aussi créer un document grâce à la fonction create().

Toutes ces fonctions renvoient une instance de la classe Document, qui permet ensuite de manipuler le document.

function displayDocumentName() { 
  const document = DocumentApp.getActiveDocument(); 
  Logger.log(document.getName()); 
} 

Par exemple, dans un projet lié au document ci-dessous :

images/18RI02.png
images/18RI03.png

2. Méthodes essentielles

La plupart des opérations commencent par l’ouverture d’un document et la récupération de son corps....

Automatiser et personnaliser les documents

Dans la plupart des projets, les documents ne sont pas générés à partir d’une page blanche. La démarche la plus robuste consiste à conserver un modèle dans Drive, à en créer une copie, puis à remplacer des balises selon des règles définies.

Cette approche garantit une mise en page stable, facilite la maintenance éditoriale et permet un contrôle fin du rendu.

1. Remplacer des balises… avec style

Voici un modèle de facture avec des balises {{ClientName}}, {{InvoiceNumber}}, {{TotalPrice}}, {{Address}}. Nous allons nous servir de ce document pour illustrer la suite des notions de ce chapitre.

images/18RI08.png

replaceText() cherche un texte et le remplace partout dans le document.

  • Le « motif » à chercher est une chaîne (par exemple, "{{ClientName}}") ou une petite regex écrite en chaîne (par exemple, "\\d{4}" - on double les antislashs).

  • Google utilise RE2 (une version limitée des regex) : cela couvre les cas courants (\d, {4}, etc.), mais pas tout.

  • La recherche se fait par petits blocs de texte (par exemple, un mot coupé par un style différent = 2 blocs). Si votre motif est coupé en deux styles, il ne sera pas trouvé. 

function fillSimpleTags() { 
  const doc = DocumentApp.getActiveDocument(); 
  const body = doc.getBody(); 
  const data = { 
    "TotalPrice": "1000$", 
    "ClientName": "Lidia", 
    "InvoiceNumber": "I000-23", 
    "Address": "123 Paradise Street" 
  } 
 
 
  Object.entries(data).forEach(([tag, value]) => { 
    const safeTag = '{{' + tag + '}}'; 
    body.replaceText(safeTag, String(value...

Techniques avancées et intégrations

1. Créer un Docs par réponse à un formulaire

Un autre cas classique d’automatisation avec Docs consiste à générer un document lorsqu’un formulaire est soumis. Cela permet par exemple de générer une invitation avec QR code, ou d’initier un bon de commande.

Prenons le cas d’un certificat de complétion, avec les balises {{FullName}}, {{CourseName}}, {{Date}}, {{Organization}}.

images/18RI17.png

Et considérons le formulaire avec les questions adéquates.

images/18RI18.png

Nous allons ensuite créer un projet Apps Script à partir du formulaire, et y injecter une fonction déclenchée automatiquement grâce à un trigger onSubmit(e)

/** 
* Trigger (installable) on the Google Form itself. 
* Creates a Docs certificate from a template using e.response (no helpers). 
*/ 
function onFormSubmit_CreateCertificate(e) { 
  const templateId = '1CRD3GZt0OiTY3qQzOGO4w4TIkbNQiWA3EHmIvoshOnc'; 
  const outputFolderId = '1bE_sXFb3VRENnajPMwyuIQVzEnP_ectk'; 
 
  // ---- Read answers by question title (Map<title, value>) ---- 
  const answersByTitle = {}; 
  const formResponse = e && e.response; 
  const itemResponses = formResponse ? formResponse.getItemResponses() : []; 
  itemResponses.forEach((itemResponse) => { 
    const title = itemResponse.getItem().getTitle(); 
    answersByTitle[title]...