2017-02-14 8 views
0

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

В этом конкретном примере я получил список адресов электронной почты на колонку, и я хочу, чтобы адрес электронной почты, чтобы получить уведомление, когда клетка рядом с ним получает обновления «Да»

До сих пор я получил это:

function Initialize() { 

    var triggers = ScriptApp.getProjectTriggers(); 

    for(var i in triggers) { 
    ScriptApp.deleteTrigger(triggers[i]); 
    } 

    ScriptApp.newTrigger("sendNotification") 
    .forSpreadsheet(SpreadsheetApp.getActiveSpreadsheet()) 
    .onEdit() 
    .create(); 

}; 


/** 
* 
*/ 


function sendNotification(e) { 


    if("B2" == e.range.getA1Notation()) { 

    if(e.value == "Yes") { 



     var recipients = "IDK what to put in here"; 
     var subject = "There's an update to your request"; 
     var body = "We resolved your issue!"; 


     MailApp.sendEmail(recipients, subject, body); 
    } 
    } 
} 

ответ

0

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

FYI вам не нужно Initialize() для установки ручного триггеров вы можете установить его вручную: https://developers.google.com/apps-script/guides/triggers/installable#managing_triggers_manually

function Initialize() { 
     var triggers = ScriptApp.getProjectTriggers(); 
     // The below code would delete all the triggers in your project not just the one you setup through this code. 
     for(var i in triggers) { 
     ScriptApp.deleteTrigger(triggers[i]); 
     } 
     ScriptApp.newTrigger("sendNotification") 
     .forSpreadsheet(SpreadsheetApp.getActiveSpreadsheet()) 
     .onEdit() 
     .create(); 
     }; 

    function sendNotification(e) { 
     //if("B2" == e.range.getA1Notation()) { 
     //This will only check is the range is B2 cell, if you want to check for column B. use getColumn 
     if(e.range.getColumn() == 2){ 
     if(e.value == "Yes") { 
      //var recipients = "[email protected]"; //Email Address of the indented Recipents 
      // In your case email would be the value in cell A2 or cell in Column A corresponding to the one edited in Col B 
      // you can get that value like so 
      var recipients = e.source.getActiveSheet().getRange(e.range.getRow(),1).getValue() 
      Logger.log(recipients) 
      var subject = "There's an update to your request"; 
      var body = "We resolved your issue!"; 
      MailApp.sendEmail(recipients, subject, body); 
     } 
     } 
    } 

Новые функции:

e.range.getColumn()/GetRow(), чтобы получить конкретный столбец или строку. Таким образом, вы работаете с числами, а не с строкой. Легко манипулировать числами с арифметикой по сравнению со строками.

e.source.getActiveSheet() дает вам объект листа, где произошло изменение. Вы используете e.source.getActiveSheet(). GetName(), чтобы получить имя листа и использовать его, чтобы убедиться, что сообщение электронной почты запускается только при редактировании на конкретном листе.

+0

Я, наконец, заработал, я внес некоторые изменения в ir, поэтому он может работать с некоторыми листами, над которыми я работал, но спасибо большое! Я сходил с ума, не зная, как правильно использовать e.range.getColumn/Row –

+0

Рад, что я могу помочь –