Script pour envoyer un mail en pdf depuis une feuille Gsheet

Bonjour,

J'ai ce script qui fonctionne très bien. Mais celui ci crée un PDF de toutes les feuilles de mon fichier qui comporte plusieurs feuilles. Comment et ou caser le choix d'une feuille.

Merci de m'aider

/* Envoyer la feuille de calcul par courriel au format PDF */
function emailFeuilleDeCalculVersPDF() {

// Email réceptionant le PDF de cette feuille de calcul var email = "xxxxx@xxxxx";"xxxxx@xxxxx";

// Obtenir l'URL de la feuille de calcul actuellement active (lien) var feuille = SpreadsheetApp.getActiveSpreadsheet();

// Sujet du message var sujet = "PDF généré depuis la feuille de calcul " + feuille.getName();

// Corps du mail var corpsDuMessage = "<p>Bonjour,</p>Veuillez trouver en pièce jointe le PDF de l'avancement des travaux en-cours REPC ET REL.<p>Bonne réception,</p>Franck"; var contenant = DriveApp.getFileById(feuille.getId()).getAs("application/pdf"); contenant.setName(feuille.getName() + ".pdf");

// Si vous n'avez pas dépassé le quota, envoi du mail avec la pièce jointe en PDF. if (MailApp.getRemainingDailyQuota() > 0) GmailApp.sendEmail(email, sujet, corpsDuMessage, { htmlBody: corpsDuMessage, attachments:[contenant]

});

}

Bonjour,

Utilise la balise "code" </> pour mettre un script, sinon ce n'est pas lisible

Voici un exemple à adapter ou simplifier (j'y ai laissé la sauvegarde du fichier pdf envoyé), qui n'envoie qu'une seule feuille

function envoiCopieFeuillePDF() {
  DocumentApp.getActiveDocument();
  DriveApp.getFiles();

  // variables
  const doc = SpreadsheetApp.getActive();
  const docID = '________mettre_ici_l_ID___du___fichier_____________';
  const feuilleID = '__ID_feuille__';
  const email = '___email_destinataire____;
  const dossier = DriveApp.getFolderById('__________ID_du_dossier______________');
  const d = Utilities.formatDate(new Date(), "GMT+1", "yyyyMMdd")
  const fichier = '____nom___du___fichier____suivi_ici_de_sa_date____________' + "_" + d + ".pdf"
  const objet = 'Test pdf';
  const corps = "Veuillez trouver ci-joint ...";

  // Création du fichier pdf
  const url = 'https://docs.google.com/spreadsheets/d/' + docID + '/export?';
  const exportOptions =
    'exportFormat=pdf&format=pdf' + 
    '&size=A4' + 
    '&portrait=true' +                     // orientation portrait, false pour paysage
    '&fitw=false' +                        // pas d'ajustement en largeur
    '&sheetnames=false&printtitle=false' + // pas de nom ni de titre à l'impression
    '&pagenumbers=false&gridlines=false' + // pas de numérotation, pas de grille
    '&fzr=false' +                         // frozen rows = pas de répétition de l'en-tête
    '&gid=' + feuilleID;
  var params = {method:"GET",headers:{"authorization":"Bearer "+ ScriptApp.getOAuthToken()}};
  var reponse = UrlFetchApp.fetch(url + exportOptions, params).getBlob();

  // Envoi email avec fichier attaché 
    GmailApp.sendEmail(email, objet, corps, {
      htmlBody: corps,
      attachments: [{
            fileName: fichier,
            content: reponse.getBytes(),
            mimeType: "application/pdf"
        }]
    });

  // Sauvegarde du fichier. 
  dossier.createFile(reponse.setName(fichier));
}  

Bonjour voici mon script. Désolé, effectivement pas terrible pour la lecture. J'ai essayé le votre, j'ai cette erreur:

13:59:53ErreurException: Unexpected error while getting the method or property getFolderById on object DriveApp.envoiCopieFeuillePDF@ Sans titre.gs:10. Je n'ai pas besoin nécessairement de garder une copie.

Pour mon script au bon format qui fonctionne mais n'arrive pas à caser la feuille voulu.

/* Envoyer la feuille de calcul par courriel au format PDF */

function emailFeuilleDeCalculVersPDF() {

  // Email réceptionant le PDF de cette feuille de calcul
  var email = "xxxxxx@xxxxfr"; 

  // Obtenir l'URL de la feuille de calcul actuellement active (lien)
  var feuille = SpreadsheetApp.getActiveSpreadsheet();

  // Sujet du message
  var sujet = "PDF généré depuis la feuille de calcul " + feuille.getName(); 

  // Corps du mail
  var corpsDuMessage = "<p>Bonjour,</p>Veuillez trouver en pièce jointe le PDF de votre feuille de calcul.<p>Bonne réception,</p>";

  var contenant = DriveApp.getFileById(feuille.getId()).getAs("application/pdf");

  contenant.setName(feuille.getName() + ".pdf");

  // Si vous n'avez pas dépassé le quota, envoi du mail avec la pièce jointe en PDF.
  if (MailApp.getRemainingDailyQuota() > 0) 
    GmailApp.sendEmail(email, sujet, corpsDuMessage, {
      htmlBody: corpsDuMessage,
      attachments:[contenant]     
    });  
}

Bonjour voici mon script. Désolé, effectivement pas terrible pour la lecture. J'ai essayé le votre, j'ai cette erreur:

13:59:53ErreurException: Unexpected error while getting the method or property getFolderById on object DriveApp.envoiCopieFeuillePDF@ Sans titre.gs:10. Je n'ai pas besoin nécessairement de garder une copie.

tu peux supprimer dossier si tu ne conserves pas de copie j'avais mis l'enveloppe complète de ce que j'ai au cas où

cela donnerait alors

function envoiCopieFeuillePDF() {

  // variables
  const docID = 'xxxxxxxxxxxx';
  const feuilleID = 'yyyyyyyyyyyyy';
  const email = 'zzzzzzzzzzzzz';
  const fichier = 'ma feuille' + ".pdf"
  const objet = 'Test pdf';
  const corps = "Veuillez trouver ci-joint ...";

  // Création du fichier pdf
  const url = 'https://docs.google.com/spreadsheets/d/' + docID + '/export?';
  const exportOptions =
    'exportFormat=pdf&format=pdf' + 
    '&size=A4' + 
    '&portrait=true' +                     // orientation portrait, false pour paysage
    '&fitw=false' +                        // pas d'ajustement en largeur
    '&sheetnames=false&printtitle=false' + // pas de nom ni de titre à l'impression
    '&pagenumbers=false&gridlines=false' + // pas de numérotation, pas de grille
    '&fzr=false' +                         // frozen rows = pas de répétition de l'en-tête
    '&gid=' + feuilleID;
  var params = {method:"GET",headers:{"authorization":"Bearer "+ ScriptApp.getOAuthToken()}};
  var reponse = UrlFetchApp.fetch(url + exportOptions, params).getBlob();

  // Envoi email avec fichier attaché 
    GmailApp.sendEmail(email, objet, corps, {
      htmlBody: corps,
      attachments: [{
            fileName: fichier,
            content: reponse.getBytes(),
            mimeType: "application/pdf"
        }]
    });

}

je ne suis pas sûr de m'en sortir avec ta version ... je regarde au cas où ...

Bonjour,

Meme probleme avec cet ligne.

const dossier = DriveApp.getFolderById('__________ID_du_dossier______________');

qu'appelle tu ID du dossier

function envoiCopieFeuillePDF() {
  DocumentApp.getActiveDocument();
  DriveApp.getFiles();

  // variables
  const doc = SpreadsheetApp.getActive();
  const docID = 'Facturier 18';
  const feuilleID = 'Facture';
  const email = 'Parametre!B5';
  const dossier = DriveApp.getFolderById('Facture18');
  const d = Utilities.formatDate(new Date(), "GMT+1", "yyyyMMdd")
  const fichier = 'Facture' + "_" + d + ".pdf"
  const objet = 'Facture18 ';
  const corps = "Veuillez trouver ci jointe la facture de loyer";

  // Création du fichier pdf
  const url = 'https://docs.google.com/spreadsheets/d/' + docID + '/export?';
  const exportOptions =
    'exportFormat=pdf&format=pdf' + 
    '&size=A4' + 
    '&portrait=true' +                     // orientation portrait, false pour paysage
    '&fitw=false' +                        // pas d'ajustement en largeur
    '&sheetnames=false&printtitle=false' + // pas de nom ni de titre à l'impression
    '&pagenumbers=false&gridlines=false' + // pas de numérotation, pas de grille
    '&fzr=false' +                         // frozen rows = pas de répétition de l'en-tête
    '&gid=' + feuilleID;
  var params = {method:"GET",headers:{"authorization":"Bearer "+ ScriptApp.getOAuthToken()}};
  var reponse = UrlFetchApp.fetch(url + exportOptions, params).getBlob();

  // Envoi email avec fichier attaché 
    GmailApp.sendEmail(email, objet, corps, {
      htmlBody: corps,
      attachments: [{
            fileName: fichier,
            content: reponse.getBytes(),
            mimeType: "application/pdf"
        }]
    });

  // Sauvegarde du fichier. 
  dossier.createFile(reponse.setName(fichier));
}  

Pouvez vous me dire d'ou vient le PB ,

16:02:32ErreurException: Unexpected error while getting the method or property getFolderById on object DriveApp.envoiCopieFeuillePDF@ Code.gs:10

Bonjour,

je ne pense pas que les codes ID soient bons

const dossier = DriveApp.getFolderById('Facture18'); c'est plutôt du genre const dossier = DriveApp.getFolderById('"1COGh2XxfGYaiu2NmxDoVdeyW_XAUYstR"');

idem pour l'ID du doc et l'ID de la feuille

exemple :

+infos : https://developers.google.com/sheets/api/guides/concepts

si l'URL de la feuille est

https://docs.google.com/spreadsheets/d/1rV2_S2q5rcakOuHs2E1iLeKR2floRIozSytAt2iRXo8/edit#gid=0

l'identifiant de la feuille est

1rV2_S2q5rcakOuHs2E1iLeKR2floRIozSytAt2iRXo8

petite rectification si je peux me permettre

si l'URL de la feuille est

https://docs.google.com/spreadsheets/d/1rV2_S2q5rcakOuHs2E1iLeKR2floRIozSytAt2iRXo8/edit#gid=0

l'identifiant du fichier (que j'appelle docID) est

1rV2_S2q5rcakOuHs2E1iLeKR2floRIozSytAt2iRXo8

et l'identifiant de la feuille (que j'appelle feuilleID) est (après gid dans l'url)

O

A noter que plusieurs dossiers comme plusieurs fichiers peuvent avoir le même nom, il faut donc travailler avec les ID


je pensais que tu n'avais pas besoin de sauvegarder, donc ceci n'est plus nécessaire ...

Meme probleme avec cet ligne.

const dossier = DriveApp.getFolderById('__________ID_du_dossier______________');

Merci

Bonjour,

comment faire pour que : const email = '___email_destinataire____;

'___email_destinataire____; soit une cellule ?

désolé des questions de débutant

var email = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Parametre').getRange('B5').getValue()

Merci ca marche au top

Rechercher des sujets similaires à "script envoyer mail pdf feuille gsheet"