Отправлять электронную почту, когда любое значение вводится в первый столбец Google Script - PullRequest
0 голосов
/ 24 мая 2019

Я хочу отправить электронное письмо получателю (clientEmail), когда данные добавляются в первый столбец этой конкретной строки. Данные в первом столбце будут представлять собой комбинацию цифр и букв. Я пробовал разные методы, используя следующий код, но никогда не смог заставить его отправлять, только когда значение в первом столбце содержит значение.

var EMAIL_DRAFTED = "EMAIL DRAFTED";

function draftMyEmails() {
var sheet = SpreadsheetApp.getActiveSheet(); // Use data from the active 
sheet
var startRow = 2;                            // First row of data to process
var numRows = sheet.getLastRow() - 1;        // Number of rows to process
var lastColumn = sheet.getLastColumn();      // Last column
var dataRange = sheet.getRange(startRow, 1, numRows, lastColumn) // Fetch the data range of the active sheet
var data = dataRange.getValues();            // Fetch values for each row in the range

// Work through each row in the spreadsheet
for (var i = 0; i < data.length; ++i) {
var row = data[i];  
// Assign each row a variable
var clientName = row[1];                // Col B: Client name
var clientEmail = row[2];               // Col C: Client email
var message1 = row[3];                       // Col D: First part of message
var message2 = row[4];                   // Col E: Second part of message
var emailStatus = row[lastColumn - 1];  // Col F: Email Status

// Prevent from drafing duplicates and from drafting emails without a recipient
if (emailStatus !== EMAIL_DRAFTED && clientEmail) {  

  // Build the email message
  var emailBody =  '<p>Hi ' + clientName + ',<p>';
      emailBody += '<p>' + message1 + ', your requested data, ' + message2 + ', is ready.<p>';


  //Send the emaiil
  MailApp.sendEmail(
    clientEmail,            // Recipient
    'Here is your data',  // Subject
    '',                     // Body (plain text)
    {
    htmlBody: emailBody    // Options: Body (HTML)
    }
  );

  sheet.getRange(startRow + i, lastColumn).setValue(EMAIL_DRAFTED); // Update the last column with "EMAIL_DRAFTED"
  SpreadsheetApp.flush(); // Make sure the last cell is updated right away
}
}
}

1 Ответ

0 голосов
/ 24 мая 2019

Начните с изменения цикла for, узнайте разницу между ++i и i++, в этом случае вы захотите использовать последний. См .: разница между ++ i и i ++ .

for (var i = 0; i < data.length; i++) {

Все, что вам нужно сделать после этого, это добавить проверку в вашем if заявлении для рассматриваемого столбца. Примечание: вы можете определить это отдельно, как вы сделали для других переменных. Я приведу 2 примера, и вы можете выбрать тот, который вы предпочитаете использовать, оба будут работать одинаково.

//option 1
if (emailStatus !== EMAIL_DRAFTED && clientEmail && row[0]) { 

//option 2
var checkData = row[0];
if (emailStatus !== EMAIL_DRAFTED && clientEmail && checkData) {

В конце ваш код должен выглядеть примерно так:

var EMAIL_DRAFTED = "EMAIL DRAFTED";

function draftMyEmails() {
  var sheet = SpreadsheetApp.getActiveSheet(); // Use data from the active sheet
  var startRow = 2;                            // First row of data to process
  var numRows = sheet.getLastRow() - 1;        // Number of rows to process
  var lastColumn = sheet.getLastColumn();      // Last column
  var dataRange = sheet.getRange(startRow, 1, numRows, lastColumn); // Fetch the data range of the active sheet
  var data = dataRange.getValues();            // Fetch values for each row in the range

  // Work through each row in the spreadsheet
  for (var i = 0; i < data.length; i++) {
    var row = data[i];  
    // Assign each row a variable
    var clientName = row[1];                // Col B: Client name
    var clientEmail = row[2];               // Col C: Client email
    var message1 = row[3];                  // Col D: First part of message
    var message2 = row[4];                  // Col E: Second part of message
    var emailStatus = row[lastColumn - 1];  // Col F: Email Status

    // Prevent from drafing duplicates and from drafting emails without a recipient
    if (emailStatus !== EMAIL_DRAFTED && clientEmail && row[0]) { 

      // Build the email message
      var emailBody =  '<p>Hi ' + clientName + ',<p>';
      emailBody += '<p>' + message1 + ', your requested data, ' + message2 + ', is ready.<p>';


      //Send the emaiil
      MailApp.sendEmail(
        clientEmail,            // Recipient
        'Here is your data',    // Subject
        '',                     // Body (plain text)
        {
          htmlBody: emailBody   // Options: Body (HTML)
        }
      );

      sheet.getRange(startRow + i, lastColumn).setValue(EMAIL_DRAFTED); // Update the last column with "EMAIL_DRAFTED"
      SpreadsheetApp.flush(); // Make sure the last cell is updated right away
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...