Script pour envoyer automatiquement une feuille Sheet par mail

Bonjour,

Je cherche à automatiser par un script l'envoi d'une feuille Sheet (active ou non) d'un classeur et seulement une feuille et non tout le classeur à une liste d'adresses mail.

De plus, j'aimerais que la feuille Sheet soit convertie au format excel au moment d'être jointe au mail.

Merci de vos réponses

Bonjour,

Pourquoi transformer en excel ? de toute façon je ne sais pas faire, mais tu as aussi 2 solutions :

  • partager tout simplement ton fichier google sheets
  • ou si tout le monde n'a pas d'adresse gmail, envoyer la feuille n pdf (ensuite il existe des convertisseurs pdf > excel)

dans le second cas, voici un script qui va envoyer la feuille en pdf via gmail

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));
}  

Bonsoir,

En combinant plusieurs scripts, j'en ai trouvé un qui fonctionne:

function onSubmit(e){
  Logger.log('submit ran');

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();

//Send active sheet as email attachment

  var ss = SpreadsheetApp.getActiveSpreadsheet()
var ssID = ss.getId();
var sheetgId = ss.getActiveSheet().getSheetId();
var sheetName = ss.getName();

var token = ScriptApp.getOAuthToken();

var email = "xxx@xx";
var subject = "xxxxx";
var body = "xxxxx";

var url = "https://docs.google.com/spreadsheets/d/"+ssID+"/export?" + "format=xlsx" +  "&gid="+sheetgId+ "&portrait=false" + "&exportFormat=xlsx";

var result = UrlFetchApp.fetch(url, {
headers: {
  'Authorization': 'Bearer ' +  token
}
});

var contents = result.getContent();

MailApp.sendEmail(email,subject ,body, {attachments:[{fileName:sheetName+".xlsx", content:contents, mimeType:"application//xlsx"}]});
};

Mais ce que j'aimerais, c'est pouvoir envoyer la feuille à des adresses mail situées sur une autre feuille.

De plus dans "subject", je voudrais combiner "xxxx" + une date dans une cellule de la feuille active: "xxxx dd/mm/yyyy"

Je n'ai pas encore trouvé comment faire !!!

Pour ces 2 points

pouvoir envoyer la feuille à des adresses mail situées sur une autre feuille.

var f = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('trucmuche');
var email = f.getRange('XX').getValue();

De plus dans "subject", je voudrais combiner "xxxx" + une date dans une cellule de la feuille active: "xxxx dd/mm/yyyy"

var d = Utilities.formatDate(sheet.getRange('XX').getValue(), "GMT+1", "EEE dd/MM/yyyy HH:mm") // H24
var subject = "xxxxx" + d;

ajuste le GMT+1 en fonction de ta situation géographique

pas testé car absence de fichier

Bonsoir,

var f = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('trucmuche');

var email = f.getRange('XX').getValue();

Je n'arrive pas à envoyer la feuille à une liste d'adresses mail située dans une plage. Seule la 1ère adresse située dans la 1ère cellule reçoit le mail. Je pourrais écrire toutes les adresses dans la 1ère cellule mais c'est pas très pratique.

Ensuite, j'ai associé le script à une image sur la feuille à envoyer et j'aimerais enlever l'image sur le fichier excel joint envoyé pour qu'elle n'apparaisse pas.

Mais tout ce que j'arrive à faire, c'est la supprimer voire la masquer sur ma feuille Sheet original.

https://docs.google.com/spreadsheets/d/1KcQvdzxT0FbXzLSZCzed6rWX9XfriUxpaKwifleAhb8/edit?usp=sharing

function SendaMail(){

var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var DateName1 = SpreadsheetApp.getActiveSheet( ).getRange("B4").getValue();
var newdate = new Date(SpreadsheetApp.getActiveSheet( ).getRange("B4").getValue());
var d = Utilities.formatDate(newdate, Session.getScriptTimeZone(), "dd-MM-yyyy");
var f = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Adresses Mail');

//Send active sheet as email attachment

var ss = SpreadsheetApp.getActiveSpreadsheet()
var ssID = ss.getId();
var sheetgId = ss.getActiveSheet().getSheetId();
var sheetName = ss.getName();

var token = ScriptApp.getOAuthToken();

var email = f.getRange("A1:A5").getValue();
var subject = "xxxx " + d;
var body = "xxx, \n\nxx,\n \nxxx";

var url = "https://docs.google.com/spreadsheets/d/"+ssID+"/export?" + "format=xlsx" +  "&gid="+sheetgId+ "&portrait=false" + "&exportFormat=xlsx";

var result = UrlFetchApp.fetch(url, {
headers: {
  'Authorization': 'Bearer ' +  token
}
});

var contents = result.getContent();

MailApp.sendEmail(email,subject ,body, {attachments:[{fileName:sheetName+".xlsx", content:contents, mimeType:"application//xlsx"}]});
};

essaie ceci pour les emails

var email = f.getRange('XX').getValues().join().split(",");

pour l'image, la seule solution que je voie est de ne pas en mettre, dans ce cas tu peux créer un menu qui se rajoutera au menu de la feuille

function onOpen(e) {
  var ui = SpreadsheetApp.getUi();
  ui.createMenu('***MENU***')
  .addItem('ici le texte de l'invit ↓', 'nomDeLaMacro')
  .addToUi();
}
Rechercher des sujets similaires à "script envoyer automatiquement feuille sheet mail"