Exportation PDF + envoie mail en option

Bonjour,

je suis à la recherche d'un coup de main pour un script d'exportation et d'enregistrement PDF + envoi par mail

j'ai vu plusieurs exemple ici ou là en cherchant dans le forum mais je ne trouve rien qui puisse correspondre totalement à mes besoins et je ne m'y connais pas assez pour tout retaper.

voici donc ce que j'aimerais faire :

1/ cliquer sur un bouton "Export PDT"

2/ choisir quelles onglets je dois exporter. quelque chose type case à cocher serait vraiment génial. il y a souvent plusieurs onglets à exporter en même temps et donc à combiner.

les exportations doivent se faire avec l'échelle "ajuster à la page"

3/ exporter le PDF, et l'enregistrer dans le même dossier que le google sheet

-> + une option qui permettrait d'envoyer un mail à une liste de destinataire prédéfinis (5 mails au total)

si le titre du mail peut aussi être rédigé à l'avance en prenant le texte d'une cellule du document c'est génial

idem pour le corps du mail

-> éventuellement cette option mail mais se faire sur une deuxième bouton si c'est plus simple.

Ça donnerai : un bouton pour enregistrer en PDF uniquement

un deuxième bouton pour enregistrer en PDF + envoyer par mail

Est-ce que tout ceci vous semble faisable ? ou c'est vraiment trop tiré par les cheveux?

si l'option "choisir les onglets à exporter" est trop compliqué à mettre en place, on peut aussi imagier plusieurs boutons avec des cas d'exportation différents.

mais ça risque de faire pas mal de bouton. sans compter les boutons PDF + mail...

merci infiniment

Bonjour,

Voici un script qui permet d'envoyer une feuille par PDF par email :

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("17LmzDRdzPpH3zt_4rufGLnGXbBWbQNo5");/* 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 +" ");

}

}

bonjour et merci,

tout d'abord j'ai essayé votre commande mais je n'arrive pas à trouver l'adresse url du dossier que ressemble à autre chose que

https://drive.google.com/drive/u/0/folders/1EuCFakiHgs6iO8-98qAusmDHkPqqe1

lorsque je prends tout ça ne fonctionne pas, et si je prends juste la fin à partie de 1Eu... ça ne fonctionne pas non plus.

j'ai bien changé vos quelques variables... (cellule contenant le nom du fichier, ou encore l'adresse mail)

Par ailleurs cette solution ne permet d'exporter en PDF que l'onglet en cours non ? et non pas une sélection de feuille si ?

je vous remercie.

excellente journée

Voici l'ID d'un dossier :

telechargement

Dans le cas du lien que vous avez partagé, c'est : 1EuCFakiHgs6iO8-98qAusmDHkPqqe1

Et en effet, ce script permet d'exporter la page active uniquement, c'est un script "tout prêt" que je partage, pour votre usage, voyez déjà s'il fonctionne, ensuite adaptez le étape par étape.

J’ai bien essayé de ne prendre que la fin de l’URL pourtant.
je dois donc avoir une erreur ailleurs.

Existe il un moyen pour savoir à quel endroit le code est erroné ?

Oui, faire des Log

Il est aussi possible de catch les erreurs, mais normalement ce script est simple et ne rencontre par d'erreur externe.

Voici le script modifié avec votre ID, je vous laisse le soin de modifier les autres variables en fonction de vos données : (docName, demandeurEmail à minima)

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();
Logger.log("voici l'url : "+url" du document : "+docName")

// 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("1EuCFakiHgs6iO8-98qAusmDHkPqqe1");/* 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();

Logger.log("le PDF a été généré et stocké dans le Drive voici son url : "+docUrl)

// 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

Logger.log("voici l'email du destinataire : "+demandeurEmail+" et voici le message : "+message)

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 +" ");

}

}

ça y est j'y suis arrivé :)

par contre comment faire pour mettre à l'échelle lors de l'impressions ?

merci

Le format est à configurer à cet endroit :

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;
images

pardon... ça recommence... j'ai à nouveau des messages qui partent vides... je suis déçu...

je disais que j'ai compris comment passer en mode paysage ou pas, mais je chercher à adapter l'échelle, qui correspond à ce réglage :

capture d ecran 2023 09 21 a 15 17 29

mais je ne trouve pas dans les lignes

merci beaucoup

Voici des commentaires :

 + '/export?exportformat=pdf&format=pdf' // Spécifie le format PDF
    + '&size=A4' // Définit la taille du papier au format A4
    + '&portrait=true' // Définit l'orientation en mode portrait
    + '&fitw=true' // Ajuste la largeur pour tenir sur une page
    + '&top_margin=-0.95' // Marge supérieure
    + '&bottom_margin=0.50' // Marge inférieure
    + '&left_margin=0.50' // Marge gauche
    + '&right_margin=0.50' // Marge droite
    + '&sheetnames=false' // Ne pas inclure le nom de la feuille
    + '&printtitle=false' // Ne pas inclure le titre de la feuille
    + '&pagenum=false' // Ne pas inclure les numéros de page
    + '&gridlines=false' // Ne pas inclure les lignes de grille
    + '&fzr=FALSE' // Ne pas figer les lignes/colonnes
    + '&gid=' + sheetId; // ID de la feuille

merci, donc j'avais juste sur :

'&fitw=true' 

et pourtant... peut être qu'il faut ajuster aussi la hauteur de la page ?

Rechercher des sujets similaires à "exportation pdf envoie mail option"