Использование триггера onEdit для данных, загруженных из другой электронной таблицы - PullRequest
0 голосов
/ 11 июня 2019

У меня есть одна электронная таблица, которая берет данные из триггера onEdit и вставляет их в новую электронную таблицу.Теперь я пытаюсь заставить эту новую электронную таблицу отправлять электронные письма, когда эти данные вставляются из другой электронной таблицы на основе определенных значений.

Я пробовал множество различных комбинаций в надежде заставить что-то работать, ноне повезло.Мой уровень ошибок триггера проекта снижается, поэтому функция работает.Это не заполнение электронной почты и отправка данных.Я не уверен, что мое утверждение If неверно или что происходит.

function sendEmail(){

  var recipientList = "EMAIL";
  var emailSubject = "Great Test Email";
  var senderName = "EmailSender";
  var s = SpreadsheetApp.getActiveSheet();
  var emailTable = "<table> <tr><th>|| Control ID ||</th> <th>Significance ||</th> <th>Control Owner ||</th> <th> Control Certifier ||</th> <th>Next IA Testing Date ||</th> <th>Most Recent IA Test Results ||</th> <th> Test Date ||</th> <th>Test Results ||</th> <th>IA Control Conclusion ||</th> </tr>";
  var subject = 'UPDATE on: '+ s.getSheetName();     
  var i = 2;
  var lastRow = s.getLastRow();


  var controlID = s.getRange(i, 2).getValue();
  var significance = s.getRange(i, 3).getValue();
  var controlOwner = s.getRange(i, 4).getValue();
  var controlCertifier = s.getRange(i, 5).getValue();
  var nextIATestingStartDate =  Utilities.formatDate(s.getRange(i, 6).getValue(), "America/Los_Angeles", "MMM-dd-yyyy"); // Format that date/timestamp 
  var mostRecentIATestResultsConclusion = s.getRange(i, 7).getValue();
  var TestDate = s.getRange(i, 8).getValue();
  var TestResults = s.getRange(i, 9).getValue();
  var IAControlConclusion = s.getRange(i, 10).getValue();


  emailTable += "<tr><td>" + controlID + "</td> <td>" + significance + "</td> <td>" + controlOwner + "</td> <td>" + controlCertifier + "</td> <td>" + nextIATestingStartDate + "</td> <td>" + mostRecentIATestResultsConclusion + "</td> <td>" + TestDate + "</td> <td>" + TestResults + "</td> <td>" + IAControlConclusion + "</td> </tr>";
  emailTable += "</table>";      

  if (controlCertifier === 'FILTER') {

     MailApp.sendEmail({
      to: recipientList,
      subject: subject,
      htmlBody: emailTable
  }); 
}
}

1 Ответ

0 голосов
/ 24 июня 2019

Вот решение, которое я нашел. Я узнал о циклах и затем вместо того, чтобы использовать onEdit для отправки электронного письма, я только что сделал ежедневного отправителя (это может быть так часто, как вы хотите) и установил его на основе отметки времени, в которую он вошел. Поэтому, если строка была вставлена ​​в течение последних 214 часов, войдите в нее и отправьте электронное письмо. Это компилирует все вместо отправки по одному. Я чувствовал, что это было лучшее решение, чем вопрос, который я первоначально отправил.

Извините, мои плохие настройки, я все еще учусь! Спасибо всем за помощь.

function dailyEmail() {

    var s = SpreadsheetApp.getActiveSheet();
    var recipientList = "EMAIL";
    var digestFrequency = 1.0;
    var emailSubject = 'Changes were made to: '+ s.getSheetName();   
    var senderName = "Email Sender";
    var lastRow = s.getLastRow();
    var i = 2;
    var date = new Date(); 
    var entriesCounter = 1;

  var emailTable = '<table> <tr><th style = "width: 200px" bgcolor = "#aed1e8"> Control ID </th> <th style = "width: 200px" bgcolor = "#aed1e8">Significance </th> <th style = "width: 500px" bgcolor = "#aed1e8">Control Description </th> <th style = "width: 200px" bgcolor = "#aed1e8">Control Owner </th><th style = "width: 200px" bgcolor = "#aed1e8"> Control Certifier </th> <th style = "width: 200px" bgcolor = "#aed1e8">Next IA Testing Date </th> <th style = "width: 200px" bgcolor = "#aed1e8">Most Recent IA Test Results Conclusion</th> <th style = "width: 200px" bgcolor = "#aed1e8"> Test Date </th> <th style = "width: 200px" bgcolor = "#aed1e8">Test Results </th> <th style = "width: 200px" bgcolor = "#aed1e8">IA Control Conclusion </th><th style = "width: 200px" bgcolor = "#aed1e8">Column Updated </th> </tr>';

    for (var i; i <= lastRow; i++) {

      var iaTestDate = new Date( s.getRange(i, 7).getValue());
      var rowDate = new Date(s.getRange(i, 1).getValue()); // your date from API         

//Time is standard set to milliseconds
      var t1 = date.getTime(),
          t2 = rowDate.getTime();
//Math to find the difference in days from the current date to the date that each row was edited or changed
      var diffInDays = Math.floor((t1-t2)/(24*3600*1000));// 24*3600*1000 is milliseconds in a day
      if (diffInDays <= digestFrequency) {
        entriesCounter++;

        var controlID = s.getRange(i, 2).getValue();
        var significance = s.getRange(i, 3).getValue();
        var controlName = s.getRange(i, 4).getValue();
        var controlOwner = s.getRange(i, 5).getValue();
        var controlCertifier = s.getRange(i, 6).getValue();
        var nextIATestingStartDate = Utilities.formatDate(iaTestDate, "America/Los_Angeles", "MMM-dd-yyyy"); // Format that date/timestamp 
        var mostRecentIATestResultsConclusion = s.getRange(i, 8).getValue();
        var TestDate = s.getRange(i, 9).getValue();
        var TestResults = s.getRange(i, 10).getValue();
        var IAControlConclusion = s.getRange(i, 11).getValue();
        var headerColumn = s.getRange(i, 12).getValue();    

//builds the table data for the email   
        emailTable += "<tr><td style = 'width: 200px' bgcolor = '#F8F8F8'>" + controlID + "</td> <td style = 'width: 200px' bgcolor = '#F8F8F8'>" + significance + "</td> <td style = 'width: 500px' bgcolor = '#F8F8F8'>" + controlName + "</td> <td style = 'width: 200px' bgcolor = '#F8F8F8'>" + controlOwner + "</td> <td style = 'width: 200px' bgcolor = '#F8F8F8'>" + controlCertifier + "</td> <td style = 'width: 200px' bgcolor = '#F8F8F8'>" + nextIATestingStartDate + "</td> <td style = 'width: 200px' bgcolor = '#F8F8F8'>" + mostRecentIATestResultsConclusion + "</td> <td style = 'width: 200px' bgcolor = '#F8F8F8'>" + TestDate + "</td> <td style = 'width: 200px' bgcolor = '#F8F8F8'>" + TestResults + "</td> <td style = 'width: 200px' bgcolor = '#F8F8F8'>" + IAControlConclusion + "</td><td style = 'width: 200px' bgcolor = '#F8F8F8'>" + headerColumn + "</td> </tr>";
      }      
    }

      emailTable += "</table>";

      if (entriesCounter == 1) {

        emailTable = "<b>No changes were made since the previous report.</b>";     
      }

     var htmlBody = "Hello, <br><br> This is an automated email sent between 6-7am. <br> <br> The Following changes have been made within the past 24 hours.<br><br>" + emailTable + '<br><br> <a href = "URL"><b>Visit the Google Sheet for this e-mail here</b></a>';
      MailApp.sendEmail(recipientList, emailSubject, '', {
        to: recipientList,
        name: senderName,
        htmlBody: htmlBody,
        cc: recipientList
      });   
      }        
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...