Google Apps Script et Google Sheets : créer, stocker, récupérer le lien d’un PDF depuis une feuille de calcul en un clic

1

Vous construisez vos documents (devis, factures…) depuis Google Sheets. Une fois le document créé, il faut télécharger le fichier au format PDF, le nommer, le placer dans le bon dossier Drive, récupérer le lien de partage pour l’envoyer aux personnes concernées… pff.
Autant de tâches laborieuses et sources d’erreur si elles sont confiées à un humain !
Cet article vous présente une solution d’automatisation des procédures de gestion de documents.


Contexte :

L’agence de graphisme 10Zaïne sait déjà créer des devis avec Sheets (voir l’article suivant).

Vous devez créer le PDF et le stocker dans le dossier des devis.

Créons ensemble un script afin d’automatiser les tâches : Suivez le guide.

10Zaïne, la fameuse agence de graphisme !

Associer un script à votre feuille de calcul

Voici une table de données de devis et la génération du document en fonction de sa référence (voir l’article suivant pour suivre la construction de ces feuilles de calcul.)

Cliquez-ici pour obtenir une copie de cette Google Sheet.

Ouvrez l’éditeur de script depuis cette feuille :

Ajouter un bouton dans la barre de menus de Sheets

La fonction « onOpen » (respectez la casse !) se déclenche à chaque ouverture du fichier. Utilisons-la pour créer un menu spécial !

Cette fonction permet de créer un bouton qui appellera la fonction « savePDF » :

function onOpen() {
  var ui = SpreadsheetApp.getUi(); 
  var menu = ui.createMenu("GED"); 
  menu.addItem("Enregistrer le PDF ↓ ","savePDF");
  menu.addToUi();
}

Pour éviter de recharger la page, exécutez le script directement.

Créer la fonction « savePDF »

function savePDF()
{
// Suivez le guide pour remplir cette fonction au fur et à mesure.
}

Créer une URL du PDF

Afin de créer le PDF de la feuille sélectionnée, il faut générer une URL qui contient l’ensemble des paramètres d’impression :

 // SÉLECTIONNER LA FEUILLE A SAUVEGARDER
  var ss = SpreadsheetApp.getActiveSpreadsheet(); 
  var sheet = ss.getActiveSheet();
 
//URL de SS ?
    var ssUrl = ss.getUrl();
    var sheetId= sheet.getSheetId();
// Créer l'URL du document   
    var url = ssUrl.replace(/\/edit.*$/,'')
      + '/export?exportformat=pdf&format=pdf'
      + '&size=LETTER'
      + '&portrait=true'
      + '&fitw=true'
      + '&top_margin=0.50'              
      + '&bottom_margin=0.50'          
      + '&left_margin=0.50'             
      + '&right_margin=0.50'           
      + '&sheetnames=false'
      + '&printtitle="TEST"'
      + '&pagenum=false'
      + '&gridlines=false'
      + '&fzr=FALSE'
      + '&gid='+sheetId;

Vous pouvez modifier les paramètres, comme les tailles des marges (top_margin, bottom_margin, left_margin, right_margin…) par exemple.

Transformer l’URL en document PDF

Pour exécuter la méthode qui transforme l’URL en document il est utile de récupérer une autorisation. Sinon le document affichera la fenêtre d’identification au compte Google.

// CRÉER LE PDF A PARTIR DE L'URL
  var token = ScriptApp.getOAuthToken();
  var docurl = UrlFetchApp.fetch(url, { headers: { 'Authorization': 'Bearer ' +  token } });
  var pdf = docurl.getAs('application/pdf');
     
  var file = DriveApp.createFile(pdf);

Créer le nom du document

Le PDF doit être nommé correctement, par exemple :

2020-003_DEVIS_10Zaine_NOM-DU-CLIENT_DATE.PDF

Pour obtenir ce nom il faut récupérer les informations présentes dans le devis.

// RÉCOLTER LES INFORMATIONS DANS LE SHEET POUR COMPOSER LE NOM DU DOCUMENT
  var docId = sheet.getRange('B2').getValue();
  var clientName =  sheet.getRange('C3').getValue();
  var docDate = sheet.getRange('D2').getValue();
  
  //mise en forme de la date : mois-annee
  var docDateMMYY = docDate.getMonth()+"-"+docDate.getFullYear();
  
  // Concaténons le tout 
  var docName = docId+"_DEVIS_10Zaine_"+clientName+"_"+docDateMMYY ;

Il faut bien évidemment adapter le code à l’emplacement de vos données :

Copier le PDF dans le bon dossier

La méthode « createFile » crée un document à la racine de votre Drive, pour le déplacer dans le bon dossier, il est recommandé de le copier et de supprimer le document d’origine.

En amont, vous devez créer un dossier qui rassemblera tous les devis de l’agence et récupérer son « ID », dans son URL par exemple :

 //COPIER LE PDF DANS LE DOSSIER  
 /*
   ATTENTION IL FAUT ADAPTER LE CODE AVEC L'ID DU FOLDER DE DESTINATION
  */
      
  var folder = DriveApp.getFolderById("ID_DU_FOLDER_A_RENSEIGNER"); 
  var finalfile = file.makeCopy(docName,folder);
  
  //SUPPRIMER LE PDF ORIGINAL
  file.setTrashed(true);  

Récupérer le lien et l’enregistrer

Créez une nouvelle feuille de calcul « GED » (Gestion Electronique des Documents) dans le même classeur. A chaque création de PDF, une nouvelle ligne s’ajoutera contenant toutes les informations d’accès au document.

 //RÉCUPÉRER LE LIEN
     var docUrl = finalFile.getUrl();
 
//ajouter l'UrL dans la GED.
    var sheetGed = ss.getSheetByName('GED');
    sheetGed.appendRow([new Date(),docId,docUrl,docName]);
    

Afficher un message de réussite

Ajoutez une boite de dialogue « Alert » qui annonce le bon déroulement de l’opération !

// ANNONCER LA RÉUSSITE DE CRÉATION DU DOCUMENT
 var ui = SpreadsheetApp.getUi(); 
 ui.alert('Well done\n\nLe devis '+ docId +' a bien été créé\nIl porte le nom : '+docName+'\n\nLe lien a été ajouté dans la GED.');

Code complet

function onOpen() {
  var ui = SpreadsheetApp.getUi(); 
  var menu = ui.createMenu("GED"); 
  
   menu.addItem("Enregistrer le PDF ↓ ","savePDF");
   
   menu.addToUi();
}
function savePDF()
{
 // SÉLECTIONNER LA FEUILLE A SAUVEGARDER
  var ss = SpreadsheetApp.getActiveSpreadsheet(); 
  var sheet = ss.getActiveSheet();
 
//URL de SS ?
    var ssUrl = ss.getUrl();
    var sheetId= sheet.getSheetId();
   
    var url = ssUrl.replace(/\/edit.*$/,'')
      + '/export?exportformat=pdf&format=pdf'
      + '&size=LETTER'
      + '&portrait=true'
      + '&fitw=true'
      + '&top_margin=0.50'              
      + '&bottom_margin=0.50'          
      + '&left_margin=0.50'             
      + '&right_margin=0.50'           
      + '&sheetnames=false'
      + '&printtitle=false'
      + '&pagenum=false'
      + '&gridlines=false'
      + '&fzr=FALSE'
      + '&gid='+sheetId;
// CRÉER LE PDF A PARTIR DE L'URL
  var token = ScriptApp.getOAuthToken();
  var docurl = UrlFetchApp.fetch(url, { headers: { 'Authorization': 'Bearer ' +  token } });
  var pdf = docurl.getAs('application/pdf');
     
  var file = DriveApp.createFile(pdf);
// RÉCOLTER LES INFORMATIONS DANS LE SHEET POUR COMPOSER LE NOM DU DOCUMENT
  var docId = sheet.getRange('B2').getValue();
  var clientName =  sheet.getRange('C3').getValue();
  var docDate = sheet.getRange('D2').getValue();
  
  //mise en forme de la date : mois-annee
  var docDateMMYY = docDate.getMonth()+"-"+docDate.getFullYear();
  
  // Concaténons le tout 
  var docName = docId+"_DEVIS_10Zaine_"+clientName+"_"+docDateMMYY ;
  
// RENOMMER ET COPIER LE PDF DANS LE BON DOSSIER  
 /*
   ATTENTION IL FAUT ADAPTER LE CODE AVEC L'ID DU FOLDER DE DESTINATION
   https://drive.google.com/open?id=XXXXXXXXXXXXXXXXXXXXXXXXXXX
  */
      
  var folder = DriveApp.getFolderById("XXXXXXXXXXXXXXXXXXXXXXXXXXX"); 
  var finalFile = file.makeCopy(docName,folder);
  
  //SUPPRIMER LE PDF ORIGINAL
  file.setTrashed(true);  
  
  //RÉCUPÉRER LE LIEN
     var docUrl = finalFile.getUrl();
 
//ajouter l'urL dans la GED.
    var sheetGed = ss.getSheetByName('GED');
    sheetGed.appendRow([new Date(),docId,docUrl,docName]);
// ANNONCER LA RÉUSSITE DE CRÉATION DU DOCUMENT
 var ui = SpreadsheetApp.getUi(); 
 ui.alert('Well done\n\nLe devis '+ docId +' a bien été créé\nIl porte le nom : '+docName+'\n\nLe lien a été ajouté dans la GED.');
     
}

Résultat final !

1. Affichez le devis à exporter et cliquez sur le bouton du menu.

2. En quelques secondes, le script se déroule. Un message vous avertit quand il est terminé.

3. Le fichier est créé dans le bon dossier !

4. les informations se sont ajoutées dans le tableau GED.


A vous de jouer en adaptant le code à votre besoin.

Ce n’est qu’un début, imaginons d’autres exploitations, comme :

  • enregistrer le document dans plusieurs dossiers (celui du client et celui du projet par exemple !) ;
  • gérer les versions de devis grâce à la table de GED !
  • créer un mail automatiquement adressé au client contenant le devis en pièce jointe ;
  • ajouter dans un Google Agenda la date d’envoi du devis !
  • déclencher la machine à café 🙂 (je rigole mais c’est surement possible !)

Faites-nous part de vos utilisations de ce script en laissant un commentaire !


Vous avez un projet autour de G Suite
et vous souhaitez nous solliciter :

formation | développement | paramétrage Gsuite | interventions | …


Si vous avez trouvé une faute d’orthographe, veuillez nous en informer en sélectionnant le texte en question et en appuyant sur Ctrl + Entrée .

1 COMMENTAIRE

LAISSER UN COMMENTAIRE

S'il vous plaît entrez votre commentaire!
S'il vous plaît entrez votre nom ici

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.