[Script] Envoyer un email a partir d'une sélection de cellules

Bonjour,

Je voudrais envoyer par email une selection de cellules (A1:F27) du fichier D feuille "R":

Ci-dessous la feuille "R" du fichier:

https://docs.google.com/spreadsheets/d/1vKrNsVkv1S_SyMOAdY-_V3ZW2II09njXqTX7i9J1SSo/edit?usp=sharing

Voici les parametres:

Objet de l'email = "Feuille R"
Destinataire = "a@a.fr"
Sujet de la feuille a mettre avant la copie des cellules A1:F27 = "Recette"

Si je veux envoyer par Outlook comment faire avec un script lancer du fichier GS du drive?

Si je veux envoyer cet email sans rien ouvrir (ni page web ni outlook)?

nb. le format et les valeur doivent s'afficher sur l'email.

Merci

Jack

Si je veux envoyer par Outlook comment faire avec un script lancer du fichier GS du drive?

par outlook, il vaut mieux passer pas excel

par GSheets, tu peux le faire avec ton adresse email et c'est tellement plus simple

il semblerait toutefois qu'on puisse le faire avec un alias à définir au préalable dans gmail, fais une recherche dans l'aide de gmail sur alias

 GmailApp.sendEmail(to, subject, textBody, {
   from: "alias@outlook.com",
   name: "Your name"
 });

je ne peux pas tester car c'est réservé à yahoo, outlook principalement

Si vous disposez d'une autre adresse e-mail, vous pouvez l'utiliser comme adresse d'expédition. Les types d'adresse suivants sont concernés :

Adresses Yahoo, Outlook ou d'autres services que Gmail

Adresses dont le domaine ou l'alias est rattaché à un compte professionnel ou scolaire, ou au compte d'une entreprise (@votreetablissement.edu ou votrealias@gmail.com, par exemple)

Autres adresses Gmail

Étape 1 : Ajoutez une autre adresse e-mail

Ouvrez Gmail sur votre ordinateur.

En haut à droite, cliquez sur Paramètres Paramètres puis Afficher tous les paramètres.

Cliquez sur l'onglet Comptes et importation ou Comptes.

Dans la section "Envoyer des e-mails en tant que", cliquez sur Ajouter une autre adresse e-mail.

Saisissez votre nom et l'adresse d'expédition que vous souhaitez utiliser.

Cliquez sur Étape suivante puis Envoyer la validation.

Étape 2 : Confirmez l'adresse

Connectez-vous au compte que vous avez ajouté.

Ouvrez le message de confirmation envoyé par Gmail.

Cliquez sur le lien.

Étape 3 : Modifiez l'adresse d'expédition

Dans le message, cliquez sur la ligne "De".

(Si ce champ n'apparaît pas, cliquez sur l'espace à côté de l'adresse du destinataire.)

Sélectionnez l'adresse d'expédition.

"par GSheets, tu peux le faire avec ton adresse email et c'est tellement plus simple"

Comment faire avec un script stp?

function sendEmail() {
  var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('R')
  var data = ss.getRange('A1:F27').getDisplayValues()
  envoyerEmail('xxxxxxxxxxxxxx@gmail.com','objet ici',tableHTML(data))
}
function envoyerEmail(email,objet,texte) {
  MailApp.sendEmail({to:email,
  subject: objet, 
  htmlBody: texte})
};
function tableHTML(plage) {
  var tableformat = 'cellspacing="2" cellpadding="2" border="1" style="width:100%;border-collapse:collapse;border:1px solid #ccc;"';
  return '<table ' + tableformat + ' >' + plage.map(l => '<tr><td>' + l.join('</td><td>') + '</td></tr>').join('') + '</table>';
}

Quand je lance le script sendEmail,

function sendEmail() {
  var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('R')
  var data = ss.getRange('A1:F27').getDisplayValues()
  envoyerEmail('monemail@gmail.com','Feuille de R',tableHTML(data))
}
function envoyerEmail(email,objet,texte) {
  MailApp.sendEmail({to:email,
  subject: objet, 
  htmlBody: texte})
};
function tableHTML(plage) {
  var tableformat = 'cellspacing="2" cellpadding="2" border="1" style="width:100%;border-collapse:collapse;border:1px solid #ccc;"';
  return '<table ' + tableformat + ' >' + plage.map(l => '<tr><td>' + l.join('</td><td>') + '</td></tr>').join('') + '</table>';
}

j'ai cette erreur:

19:02:37    Erreur    Une erreur inconnue s’est produite. Veuillez réessayer plus tard.

ou dois je ecrire le destinataire et l'expediteur ainsi que le sujet?

Jack

re-essaye, je pense qu'il y a eu une déconnexion avec google, cela m'est déjà arrivé sur d'autres scripts

pour le destinataire, c'est ici monemail@gmail.com

l'émetteur c'est ton email en @gmail.com

le sujet c'est bien Feuille de R

j'ai ressaye mais quand je lance le script je ne recois rien.

Je ne sais pas pourquoi.

Est ce que tu peux entrer dans le script et regarder stp

je l'ai aussi mis dans menu.

essaye avec ton email pour voir.

cela fonctionne

la raison est que j'avais déjà écrit le script dans un autre module et quand la fonction est doublée, on ne sait jamais laquelle est prise en compte

Je n'ai pas bien recu regarde:

email recu

Je voudrais exactement la meme chose que sur la feuille R:

r

Jack

ok, avec cellules fusionnées et tout le bazar !!

j'ai ce qu'il faut sauf pour les encadrements sur lesquels il faut que je travaille ... et je ne suis pas sûr d'y arriver, sauf à le faire en fichier pdf attaché

function sendEmail() {
  var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('R')
  var data = ss.getRange('A1:F27')
  envoyerEmail('xxxxxxxxxxxx@gmail.com','Feuille de Recette',tableHTML(data)) // 
}
function envoyerEmail(email,objet,texte) {
  MailApp.sendEmail({to:email,
  subject: objet, 
  htmlBody: texte})
};
function tableHTML(range){
  var data      = range.getDisplayValues()
  var size      = range.getFontSizes()
  var style     = range.getFontStyles()
  var weight    = range.getFontWeights()
  var line      = range.getFontLines()
  var bg        = range.getBackgrounds()
  var color     = range.getFontColors()
  var font      = range.getFontFamilies()
  var textalign = range.getHorizontalAlignments()
  var offsetx   = range.getRow()
  var offsety   = range.getColumn()

  var mergedRanges = range.getMergedRanges();
  var flag = Array.from({ length: range.getNumRows() }, () => Array.from({ length: range.getNumColumns() }, () => true));
  var layout = Array.from({ length: range.getNumRows() }, () => Array.from({ length: range.getNumColumns() }, () => ''));
  mergedRanges.forEach((rng,i) => {
    for (x=rng.getRow();x<rng.getRow()+rng.getNumRows();x++){
      for (y=rng.getColumn();y<rng.getColumn()+rng.getNumColumns();y++){
        try{flag[x-offsetx][y-offsety]=false}catch(e){}
      }
    }
    flag[rng.getRow()-offsetx][rng.getColumn()-offsety]=true
    layout[rng.getRow()-offsetx][rng.getColumn()-offsety]=' colspan="'+rng.getNumColumns()+'" rowspan="'+rng.getNumRows()+'" '
  });

  var tableformat = 'cellspacing="2" cellpadding="2" border="1" style="width:100%;border-collapse:collapse;border:1px solid #ccc"';
  var htmltable = '<table ' + tableformat +' >';
  for (row = 0; row<data.length; row++){
    htmltable += '<tr>';
    for (col = 0 ;col<data[row].length; col++){
      if (flag[row][col]){
        if (data[row][col] === '') {
          htmltable += '<td '+layout[row][col]+' style="background-color:' + bg[row][col] + ';">' + ' ' + '</td>';
        } 
        else
          htmltable += '<td '+layout[row][col] + 
          ' style="font-family:' + font[row][col] + 
          '; background-color:' + bg[row][col] + 
          '; color:' + color[row][col] + 
          '; font-style:' + style[row][col] + 
          '; font-weight:' + weight[row][col] + 
          '; text-decoration:' + line[row][col] + 
          '; font-size:' + size[row][col] + 'px' +
          '; text-align:' + textalign[row][col] + ';">' + 
          data[row][col].replace(/(\r\n|\n|\r)/gm,"<br>") + '</td>';
        }
      }
    htmltable += '</tr>';
  }
  htmltable += '</table>';
  return htmltable
}

je vais étudier une autre solution d'ici ce soir, sans garantie de retrouver exactement l'image de la feuille, sinon il faudra passer en pdf attaché au mail

En fichier pdf attache j'accepte aussi si tu veux.

Tu peux le faire ca me va.

Fait,

j'ai laissé les 2 versions

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

  // variables
  const email = 'xxxxxxxxxxxxxxx@gmail.com';

  const docID = SpreadsheetApp.getActiveSpreadsheet().getId();
  const feuilleID = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('R').getSheetId();

  const fichier = 'Feuille de Recette' + ".pdf"
  const objet = 'Feuille de Recette';
  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"
    }]
  });

}
Rechercher des sujets similaires à "script envoyer email partir selection"