Невозможно правильно добавить значение в ячейку с помощью ГАЗА - PullRequest
0 голосов
/ 04 сентября 2018

Я принял сценарий ниже, и у меня две проблемы.

  1. Значение «Отправлено по электронной почте» не обновляется в правильной строке. Допустим, я отправил электронное письмо получателю в строке 5, вместо того, чтобы появиться в столбце 10 строки 5 «Отправленные сообщения электронной почты» отображаются в столбце 10 строки 21.
  2. Иногда «Email Sent» вообще не появляется, хотя я знаю, что электронная почта ушла.

Я перепробовал все, что мог, но не могу заставить его работать.

//Send approval or non-approval of time off request
function sendLeaveRequestDecisions() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("Form Responses 2");
  var dataRange = sheet.getRange(2,1,sheet.getLastRow()-1,sheet.getLastColumn());
  var data = dataRange.getValues();
  for (i in data) {

    var startRow = 2; //First row of data to process
    var rowData = data [i];
    var startdate = rowData [2];
    var enddate = rowData [3];
    var type = rowData [4];
    var email = rowData [5];
    var recipient = rowData [1];
    var decision = rowData [7];
    var comments = rowData [8];
    var emailstatus = rowData [9]
    var emailPattern = /^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+(?:[A-Z]{2}|aero|asia|biz|com|coop|edu|gov|info|int|jobs|mil|mobi|name|museum|name|net|org|pro|tel|travel)\b/;
    var validEmailAddress = emailPattern.test(email); 

    if (validEmailAddress == true && emailstatus != "Email Sent") {    


        var message = "<HTML><BODY>"
        + "<P>Dear " + recipient + ","
        + "<br /><br />"
        + "<P>The following request:"
        + "<br /><br />"
        + "<b>Type:  </b>" + type + "<br />" 
        + "<b>From:  </b>" + startdate + "<br />" 
        + "<b>To:  </b>" + enddate + "<br />" 
        + "<br /><br />" 
        + "<b>is </b>" + decision + "<br />"   
        + "<b>Comments </b>" + comments + "<br />"
        + "<br /><br />"    
        + "Diane"
        + "<br /><br />" 
        + "</HTML></BODY>";      
      MailApp.sendEmail(email, "Regarding your leave request", "", {htmlBody: message});   
   sheet.getRange(i + 2,10).setValue("Email Sent"); 
      // Make sure the cell is updated right away in case the script is interrupted
      SpreadsheetApp.flush();
    }
}
  }

Ответы [ 2 ]

0 голосов
/ 05 сентября 2018

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

Если вы бы хотели, чтобы я попытался написать что-то, что вы и другие могли бы выполнить, я сделаю это. Мой пример того, как это сделать, личный - даже более - чем твой.

0 голосов
/ 04 сентября 2018

Попробуйте это:

Чаще всего было неправильно то, что вы не избежали косой черты, содержащейся в выражении вашего выражения. Я удивлен, что он побежал. Это работает хорошо для меня. Возможно, вы захотите взглянуть на Utilities.formatString () для создания вашего сообщения. Просто нажмите Справка / Справочник по API. Оттуда это внизу слева, где написано Script Service / Utilities.

Лично я бы не ставил флеш в такой цикл. Я переместил startRow и emailPattern из цикла. Они не меняются. Чем меньше вы включаете цикл, тем быстрее он работает. Я закомментировал MailApp.sendmail, потому что на самом деле я не хотел отправлять электронную почту, и я предполагаю, что вы правильно поняли.

function sendLeaveRequestDecisions() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("Index Generation");
  var dataRange = sheet.getRange(2,1,sheet.getLastRow()-1,sheet.getLastColumn());
  var data = dataRange.getValues();
  var startRow = 2; //First row of data to process
  var emailPattern = /^[a-z0-9!#$%&'*+\/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+\/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+(?:[A-Z]{2}|aero|asia|biz|com|coop|edu|gov|info|int|jobs|mil|mobi|name|museum|name|net|org|pro|tel|travel)\b/;
  for (var i=0;i<data.length;i++){
    var rowData = data [i];
    var startdate = rowData[2];
    var enddate = rowData[3];
    var type = rowData[4];
    var email = rowData[5];
    var recipient = rowData[1];
    var decision = rowData[7];
    var comments = rowData[8];
    var emailstatus = rowData[9];
    var validEmailAddress = emailPattern.test(email); 
    if (validEmailAddress == true && emailstatus != "Email Sent") {
      var message = "<HTML><BODY>" + "<P>Dear " + recipient + "," + "<br /><br />" + "<P>The following request:" + "<br /><br />" + "<b>Type:  </b>" + type + "<br />" + "<b>From:  </b>" + startdate + "<br />" + "<b>To:  </b>" + enddate + "<br />"  + "<br /><br />" + "<b>is </b>" + decision + "<br />"   + "<b>Comments </b>" + comments + "<br />"+ "<br /><br />" + "Diane"+ "<br /><br />" + "</HTML></BODY>";          
      //MailApp.sendEmail(email, "Regarding your leave request", "", {htmlBody: message});   
      sheet.getRange(i + 2,10).setValue("Email Sent"); 
    }
  }                                             
  //SpreadsheetApp.flush();                                             
}
...