2017-09-30 7 views
0

J'ai un script qui envoie un e-mail pour chaque cellule d'une plage de cellules. Pour éviter d'envoyer des e-mails en double à chaque fois que le script est réexécuté, il marque une cellule (colonne C) dans chaque ligne chaque fois qu'un e-mail est envoyé. S'il vous plaît voir l'exemple dans 'Sheet2'.Google Sheets - Envoyer un e-mail en fonction du texte d'une autre cellule

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

Cependant, je veux convertir en un script pour « Sheet1 » qui envoie un e-mail chaque fois qu'une cellule dans la ligne correspondante contient un texte spécifique. Dans cet exemple, chaque fois que la colonne I contient une coche (✓), j'aimerais qu'un message (colonne E) soit envoyé avec la ligne d'objet correspondante (colonne D). Je veux également éviter les courriels en double, un peu comme l'exemple de 'Sheet2'. En d'autres termes, une fois que la colonne I contient une coche, le message est envoyé, complété et ne sera pas renvoyé à moins que la coche ne soit effacée et ressaisie.

// This constant is written in column C for rows for which an email 
// has been sent successfully. 
var EMAIL_SENT = "EMAIL_SENT"; 

function sendEmails2() { 
var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var s = ss.getSheetByName('Sheet2'); 
    var startRow = 2; // First row of data to process 
    var numRows = 2; // Number of rows to process 
    // Fetch the range of cells A2:B3 
    var dataRange = s.getRange(startRow, 1, numRows, 3) 
    // Fetch values for each row in the Range. 
    var data = dataRange.getValues(); 
    for (var i = 0; i < data.length; ++i) { 
    var row = data[i]; 
    var emailAddress = "[email protected]"; 
    var message = row[1];  // Second column 
    var emailSent = row[2];  // Third column 
    if (emailSent != EMAIL_SENT) { // Prevents sending duplicates 
     var subject = row[0]; // First column 
     MailApp.sendEmail(emailAddress, subject, message); 
     s.getRange(startRow + i, 3).setValue(EMAIL_SENT); 
     SpreadsheetApp.flush(); 
    } 
    } 
} 

Toute aide serait grandement appréciée.

Merci!

Répondre

0

Essayez ceci:

function sendEmails2() { 
var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var s = ss.getSheetByName('Sheet1'); 
    var startRow = 2; // First row of data to process 
    var numRows = 2; // Number of rows to process 
    // Fetch the range of cells A2:B3 
    var dataRange = s.getRange(startRow, 1, numRows, 3) 
    // Fetch values for each row in the Range. 
    var data = dataRange.getValues(); 
    for (var i = 0; i < data.length; ++i) { 
    var row = data[i]; 
    var emailAddress = "[email protected]"; 
    var message = row[1];  // Second column 
    var emailSent = row[2];  // Third column 
    if (row[8]) { // Prevents sending duplicates 
     var subject = row[0]; // First column 
     MailApp.sendEmail(emailAddress, subject, message); 
     s.getRange(startRow + i, 9).setValue(""); 
     SpreadsheetApp.flush(); 
    } 
    } 
} 
+0

Bonjour Cooper, je vous remercie pour l'aide! Je suis désolé, mais je suis assez nouveau pour google scripting et je ne sais pas comment faire fonctionner cela avec Sheet1. Lorsque je sélectionne la coche, je ne reçois rien dans ma boîte de réception. J'ai changé quelques choses: var startRow = 3 et var dataRange = s.getRange (startRow, 1, numRows, 3 parce que dans la feuille 1 les lignes sont différentes - toujours rien. Je vise un email à envoyer dès que possible lorsque je clique sur la coche dans le menu déroulant, au lieu d'envoyer des e-mails à partir de plusieurs cellules, je souhaite envoyer un e-mail uniquement si la ligne contient une coche. –