Roch-André
Roch-André

Reputation: 3

Sending multiple line email with google script ( Google Sheet )

I am new in the script life. I would like send a email based on multiple cell values. The email is working but sometimes I have only 1 PO to sent, so my current code will be sending PO1 + 9 empty lines and my email is now super long.

I think that I need to create an IF statement but am not sure where to start.

function mailtest() {

  var TO = SpreadsheetApp.getActiveSheet().getRange('N3').getValue();
  var CC = SpreadsheetApp.getActiveSheet().getRange('N5').getValue();
  var SUBJECT = SpreadsheetApp.getActiveSheet().getRange('L9').getValue();
  var TEXT = SpreadsheetApp.getActiveSheet().getRange('L11').getValue();
  var TEXT2 = SpreadsheetApp.getActiveSheet().getRange('L13').getValue();
  var PO1 = SpreadsheetApp.getActiveSheet().getRange('L15').getValue();
  var PO2 = SpreadsheetApp.getActiveSheet().getRange('L16').getValue();
  var PO3 = SpreadsheetApp.getActiveSheet().getRange('L17').getValue();
  var PO4 = SpreadsheetApp.getActiveSheet().getRange('L18').getValue();
  var PO5 = SpreadsheetApp.getActiveSheet().getRange('L19').getValue();
  var PO6 = SpreadsheetApp.getActiveSheet().getRange('L20').getValues();
  var PO7 = SpreadsheetApp.getActiveSheet().getRange('L21').getValues();
  var PO8 = SpreadsheetApp.getActiveSheet().getRange('L22').getValues();
  var PO9 = SpreadsheetApp.getActiveSheet().getRange('L23').getValues();
  var P10 = SpreadsheetApp.getActiveSheet().getRange('L24').getValues();
  var signature = Gmail.Users.Settings.SendAs.list("me").sendAs.filter(function(account){if(account.isDefault){return true}})[0].signature; 
  MailApp.sendEmail({

    to: TO,
    subject: SUBJECT,
    cc: CC,
   htmlBody: 
    TEXT+"<br><br>"+

    TEXT2+"<br><br>"+
    //here is the problem ? I dont want PO3&4&5&6 if I only have 2 PO.
    PO1+"<br>"+          
    PO2+"<br>"+
    PO3+"<br>"+
    PO4+"<br>"+
    PO5+"<br>"+
    PO6+"<br>"+
    PO7+"<br>"+
    PO8+"<br>"+
    PO9+"<br>"+
    P10+"<br><br>"+
       signature


});

}

Upvotes: 0

Views: 1581

Answers (1)

Tedinoz
Tedinoz

Reputation: 8069

You want to include variables in an email only if the variable has a value. The following code differs from yours in several ways.

  • the PO values are retrieved as a whole: sheet.getRange(15,12,10,1).getValues(); This enables evaluation of the contents without complicated variable handling
  • the code loops through the values: for (var i=0; i<PO.length;i++){, and
  • evaluates whether the PO has a value if ( if (POValue){){
  • if this evaluates as yes (PO has a value), then it is added to the email text(POText = POText+POValue+"<br>"); otherwise, that PO is not included in the email text.

function so58564238() {

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheetname = "58564238";
  var sheet = ss.getSheetByName(sheetname);
  var POText = "";
  var PO = sheet.getRange(15,12,10,1).getValues();
  for (var i=0; i<PO.length;i++){
    var POValue = PO[i][0];
     if (POValue){
      POText = POText+POValue+"<br>"       
    }
  }
  Logger.log(POText)
}

Incorporating the mailtest

function mailtest() {

  var TO = SpreadsheetApp.getActiveSheet().getRange('N3').getValue();
  var CC = SpreadsheetApp.getActiveSheet().getRange('N5').getValue();
  var SUBJECT = SpreadsheetApp.getActiveSheet().getRange('L9').getValue();
  var TEXT = SpreadsheetApp.getActiveSheet().getRange('L11').getValue();
  var TEXT2 = SpreadsheetApp.getActiveSheet().getRange('L13').getValue();
  var POText = "";
  var PO = sheet.getRange(15,12,10,1).getValues();
  for (var i=0; i<PO.length;i++){
    var POValue = PO[i][0]
     if (POValue){
      POText = POText+POValue+"<br>"       
    }
  }
  var signature = Gmail.Users.Settings.SendAs.list("me").sendAs.filter(function(account){if(account.isDefault){return true}})[0].signature; 
  MailApp.sendEmail({
    to: TO,
    subject: SUBJECT,
    cc: CC,
    htmlBody: 
    TEXT+"<br><br>"+
    TEXT2+"<br><br>"+
    POText+"<br>"+
    signature
  });

}

Upvotes: 2

Related Questions