Création PDF automatique dans Google drive puis envoi par mail

Bonjour je suis débutant dans l'automatisation et j'ai besoin d'aide, voilà je souhaiterais à partir d'un PDF créer dans Google Drive l'envoyer par mail automatiquement j'ai créé une base de script qui me crée le PDF dans Drive mais après je n'arrive pas à trouver de script pour envoyer mon PDF par mail automatiquement si vous avez la solution je suis preneur merci.

voilà mon script

function onOpen() {
  // Trigger function that runs when the spreadsheet is opened
  var ui = SpreadsheetApp.getUi();
  // Creates a custom menu named "Print Invoices"
  ui.createMenu('PDF FACTURE')
    // Adds a menu item "Print All Invoices" that calls the function "PrintToPDF"
    .addItem('ALL Facture PDF', 'PrintToPDF')
    // Adds a menu item "Select Invoices to Print" that calls the function "promptUserToSelectInvoices"
    .addItem('Select Facture PDF', 'promptUserToSelectInvoices')
    .addToUi();
}

function PrintToPDF() {
  var spreadsheet = SpreadsheetApp.getActive();
  var databaseSheet = spreadsheet.getSheetByName('Base de données');
  var invoiceSheet = spreadsheet.getSheetByName('Facture');

  var dataRange = databaseSheet.getRange(2, 1, databaseSheet.getLastRow() -1, 1);
  var data = dataRange.getValues();

  for (var i = 0; i < data.length; i++) {
    var valueToPrint = data[i][0];
    invoiceSheet.getRange('F12').setValue(valueToPrint);

    var url = 'https://docs.google.com/spreadsheets/d/' + spreadsheet.getId() + '/export?';
    var params = {
      exportFormat: 'pdf',
      format: 'pdf',
      size: 'letter',
      portrait: 'true',
      fitw: 'true',
      sheetnames: 'false',
      printtitle: 'false',
      top_margin: 0,
      bottom_margin: 0,
      left_margin: 0,
      right_margin: 0,
      gid: invoiceSheet.getSheetId()
    };

    var range = invoiceSheet.getDataRange();
    var rangeParam = '&range=' + range.getA1Notation();
    url += getUrlParams(params) + rangeParam;

    var backoffTime = 500;
    var maxBackoffTime = 5000;
    var attempts = 0;
    var response;

    while (true) {
      try {
        Utilities.sleep(backoffTime);
        response = UrlFetchApp.fetch(url, {
          headers: {
            Authorization: 'Bearer ' + ScriptApp.getOAuthToken()
          },
          muteHttpExceptions: true
        });

        break; // Break out of the while loop if the request is successful
      } catch (e) {
        if (e.message.indexOf('Exception: Request failed for') === -1 || e.message.indexOf('returned code 429') === -1) {
          throw e; // Throw an exception if it's not a 429 error
        }

        attempts++;
        if (attempts >= 5) {
          throw e; // If the maximum number of attempts is reached, throw an exception
        }

        backoffTime *= 2; // Exponential backoff
        backoffTime = Math.min(backoffTime, maxBackoffTime); // Limit backoff time to maximum value
      }
    }

    var fileName = 'Invoice_' + valueToPrint + '.pdf';
    var downloadsFolder = DriveApp.getRootFolder().getFoldersByName('pdf_invoices').next();
    var file = downloadsFolder.createFile(response.getBlob().setName(fileName));
    var fileUrl = file.getUrl();
    Logger.log('PDF file URL: ' + fileUrl);
  }
}

function getUrlParams(params) {
  var keys = Object.keys(params);
  var query = '';

  keys.forEach(function(key, index) {
    query += key + '=' + params[key];

    if (index < (keys.length - 1)) {
      query += '&';
    }
  });

  return query;
}

function promptUserToSelectInvoices(data) {
  // Prompts the user to enter invoice numbers separated by commas
  var selectedInvoices = [];
  var ui = SpreadsheetApp.getUi();
  var response = ui.prompt('Select Invoices to Print', 'Enter the invoice numbers separated by commas:', ui.ButtonSet.OK_CANCEL);

  if (response.getSelectedButton() === ui.Button.OK) {
    var input = response.getResponseText().trim();
    selectedInvoices = input.split(',').map(function(value) {
      return value.trim();
    });

    // Calls the PrintSelectedToPDF() function with the selectedInvoices array
    PrintSelectedToPDF(selectedInvoices);
  }
}

function PrintSelectedToPDF(invoicesToPrint) {
  var spreadsheet = SpreadsheetApp.getActive();
  var databaseSheet = spreadsheet.getSheetByName('Base de données');
  var invoiceSheet = spreadsheet.getSheetByName('Facture');

  var dataRange = databaseSheet.getRange(2, 1, databaseSheet.getLastRow() -1, 1);
  var data = dataRange.getValues();

  for (var i = 0; i < data.length; i++) {
    var valueToPrint = data[i][0];

    // Check if invoicesToPrint is empty or includes the current invoice number
    if (invoicesToPrint.length === 0 || invoicesToPrint.includes(valueToPrint)) {
      invoiceSheet.getRange('F12').setValue(valueToPrint);

      var url = 'https://docs.google.com/spreadsheets/d/' + spreadsheet.getId() + '/export?';
      var params = {
        exportFormat: 'pdf',
        format: 'pdf',
        size: 'letter',
        portrait: 'true',
        fitw: 'true',
        sheetnames: 'false',
        printtitle: 'false',
        top_margin: 0,
        bottom_margin: 0,
        left_margin: 0,
        right_margin: 0,
        gid: invoiceSheet.getSheetId()
      };

      var range = invoiceSheet.getDataRange();
      var rangeParam = '&range=' + range.getA1Notation();
      url += getUrlParams(params) + rangeParam;

      var backoffTime = 500;
      var maxBackoffTime = 5000;
      var attempts = 0;
      var response;

      while (true) {
        try {
          Utilities.sleep(backoffTime);
          response = UrlFetchApp.fetch(url, {
            headers: {
              Authorization: 'Bearer ' + ScriptApp.getOAuthToken()
            },
            muteHttpExceptions: true
          });

          break; // Break out of the while loop if the request is successful
        } catch (e) {
          if (e.message.indexOf('Exception: Request failed for') === -1 || e.message.indexOf('returned code 429') === -1) {
            throw e; // Throw an exception if it's not a 429 error
          }

          attempts++;
          if (attempts >= 5) {
            throw e; // If the maximum number of attempts is reached, throw an exception
          }

          backoffTime *= 2; // Exponential backoff
          backoffTime = Math.min(backoffTime, maxBackoffTime); // Limit backoff time to maximum value
        }
      }

      var fileName = 'Invoice_' + valueToPrint + '.pdf';
      var downloadsFolder = DriveApp.getRootFolder().getFoldersByName('pdf_invoices').next();
      var file = downloadsFolder.createFile(response.getBlob().setName(fileName));
      var fileUrl = file.getUrl();
      Logger.log('PDF file URL: ' + fileUrl);
    }
  }
}

Bonjour,

Voici un script clé en main réalisant cette tâche, vous avez juste à adapter quelques variables :

function savePDF()
{
// Selection de la feuille à PDFiser
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();

//générer URL de la feuille
    var ssUrl = ss.getUrl();
    var sheetId= sheet.getSheetId();

    var url = ssUrl.replace(/\/edit.*$/,'') // ici sont indiquées les caractéristiques de l'impression PDF, il necessite d'adapter les marges, orientation en fonction de vos données.
      + '/export?exportformat=pdf&format=pdf'
      + '&size=A4'
      + '&portrait=true'
      + '&fitw=true'
      + '&top_margin=-0.95'
      + '&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éation du nom du PDF, dans mon cas une cellule située en A6, vous pouvez y mettre un nom directement, ou bien un autre celulle.
  var docName =  sheet.getRange('A6').getValue();
// 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').setName(docName);
  var file = DriveApp.createFile(pdf);

  // enregistrement du PDF dans le Drive
  var folder = DriveApp.getFolderById("17LmzDRdzPpH3z_4ruLnGXbBWbQNo5");/* Important ! > Ici on doit mettre l'adresse du dossier drive où on veut sauvegarder le PDF, allez dans votre dossier et dans la barre d'URL en haut copier le code qui ressemble à ça : 0AGuVhN09TP00Uk9PVA */
  var finalFile = file.moveTo(folder);
  var docUrl = finalFile.getUrl();

  // Envoi du PDF par mail
  var demandeurEmail = sheet.getRange('F5').getValue(); /* ici l'adresse mail de mon destinataire se situe dans une cellule, il est possible de changer directement l'information, ou de mettre une autre cellule */
  var message = "Bonjour"+"<p>Ci-joint le "+docName+"</p>"+"<a href='"+docUrl+"'>Cliquez ici pour ouvrir le recap.</a>"; // texte du mail
MailApp.sendEmail({to:demandeurEmail , subject: ""+docName, htmlBody:message}) ;

 // facultatif, cela sert à confirmer à l'utilisateur que le mail à  bien été envoyé
 var demandeur = "Prénom NOM"; // nom du destinataire
 var ui = SpreadsheetApp.getUi(); 
 ui.alert("Le "+ docName +" a bien été créé\n et été envoyé à "+ demandeur +" ");
}
}

Merci je test ça

Rechercher des sujets similaires à "creation pdf automatique google drive puis envoi mail"