skip to Main Content

Google Apps Script : Envoyer une feuille par mail en pièce jointe PDF

Vous développez des macros Google Apps Script qui nécessitent l’envoi d’un email ? Voici un extrait de code vous permettant de mettre ce processus en place rapidement.

L’email est envoyé depuis le compte Google exécutant la macro. Une autorisation devra être acceptée lors de la toute première exécution.

Ce script peut également être utilisé via un déclencheur (pour vous avertir tous les matins à 9h00 en cas de rupture dans vos stocks, par exemple).

function emailSpreadsheetAsPDF() {
  
  var email = "emaildestinataire@gmail.com"; 
  var ss = SpreadsheetApp.getActiveSpreadsheet();

  var subject = "PDF généré depuis la feuille " + ss.getName(); 
  var body = "Voici votre fichier en pièce jointe";
  
  // Base URL
  var url = "https://docs.google.com/spreadsheets/d/SS_ID/export?".replace("SS_ID", ss.getId());
  
  var url_ext = 'exportFormat=pdf&format=pdf'        // export as pdf / csv / xls / xlsx
  + '&size=letter'                       // paper size legal / letter / A4
  + '&portrait=false'                    // orientation, false for landscape
  + '&fitw=true&source=labnol'           // fit to page width, false for actual size
  + '&sheetnames=false&printtitle=false' // hide optional headers and footers
  + '&pagenumbers=false&gridlines=false' // hide page numbers and gridlines
  + '&fzr=false'                         // do not repeat row headers (frozen rows) on each page
  + '&gid=';                             // the sheet's Id
  
  var token = ScriptApp.getOAuthToken();
  var sheets = ss.getSheets(); 
  
  //make an empty array to hold your fetched blobs  
  var blobs = [];
  
  for (var i=0; i<sheets.length; i++) {
    
    // Convert individual worksheets to PDF
    var response = UrlFetchApp.fetch(url + url_ext + sheets[i].getSheetId(), {
      headers: {
        'Authorization': 'Bearer ' +  token
      }
    });
    
    //convert the response to a blob and store in our array
    blobs[i] = response.getBlob().setName(sheets[i].getName() + '.pdf');
    
  }
  
  //create new blob that is a zip file containing our blob array
  //  var zipBlob = Utilities.zip(blobs).setName(ss.getName() + '.zip'); 
   var zipBlob = blobs[0];
  
  //optional: save the file to the root folder of Google Drive
  DriveApp.createFile(zipBlob);
  
  // Define the scope
  Logger.log("Storage Space used: " + DriveApp.getStorageUsed());
  
  // If allowed to send emails, send the email with the PDF attachment
  if (MailApp.getRemainingDailyQuota() > 0) 
    GmailApp.sendEmail(email, subject, body, {
      htmlBody: body,
      attachments:[zipBlob]     
    });  
}

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Back To Top