2015-05-04 3 views
0

Я действительно мог бы использовать некоторую помощь, и я был бы очень признателен за любые указания, которые любой может дать. Я знаю, есть некоторые другие вопросы, связанные с, но из чего я могу найти, у кого-то еще этот вопрос вопрос/запрос.Правильное уведомление электронной почты для скриптов Google Apps

У меня есть Лист Google, в котором работают три разных человека. У меня есть этот сценарий уведомления, который будет уведомлять конкретных пользователей по электронной почте о любых изменениях в любой из ячеек столбца F. Важно отметить, что это уведомление по электронной почте также содержит значение ячейки A в этой строке, у которой было изменено значение F-ячейки.

Тем не менее, что я действительно пытаюсь достичь, это сценарий уведомления, который отправит по электронной почте указанное лицо только, когда любая ячейка в столбце F имеет новое значение «Да» в Листе2 основного листа.

код Я до сих пор (что отправляет уведомление, когда любое изменение происходит в колонке F):

function sendNotification(e) { 
    var received = e.value; //Gets the value of the edited cell 
}; 
    function sendNotification() { 
      var ss = SpreadsheetApp.getActiveSpreadsheet(); 
      var sheet = ss.getSheetByName("Sheet 2"); 
      var cell = ss.getActiveCell().getA1Notation(); 
      var row = sheet.getActiveRange().getRow(); 
      var cellvalue = ss.getActiveCell().getValue().toString(); 
      var received = ss.getRange('F2:F').getValue(); 
      var recipients = "[email protected]"; 
      var message = ''; 
      if(received==="Yes"){ 
      message = sheet.getRange('A'+ sheet.getActiveCell().getRowIndex()).getValue() 
      var subject = 'A cell value '+ sheet.getRange('A'+ sheet.getActiveCell().getRowIndex()).getValue() + ' has been received'; 
      var body = sheet.getName() + ' has been updated. Visit ' + ss.getUrl() + ' to view the changes on row: «' + row + '». New comment: «' + cellvalue + '». For message: «' + message + '»'; 
      MailApp.sendEmail(recipients, subject, body)}; 
     Logger.log('received value: ' + received); 
     }; 
+0

Используйте 'Logger.log ('полученное значение:' + received);' statement для проверки значения переменной 'received'. Запустите код, затем в меню VIEW выберите LOGS. –

+0

Я только что добавил это и проверил журнал и увидел следующее: '[15-05-04 10: 59: 50: 200 MDT] полученное значение: No' , а затем я изменил значение в листе и журнале читать: '[15-05-04 10: 57: 49: 470 MDT] полученное значение: Да' – Lonememe

ответ

1

Если это помогает, ниже код, который работает в моих тестах: (настроить инсталлируемый курок, чтобы заставить его работать)

Примечание: Я добавил пару Logger.log кое-где, чтобы проверить переменные и сообщение Browser, чтобы избежать отправки писем во время тестирования.

function sendNotification() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet = ss.getSheetByName("Sheet 2"); 
    var cell = ss.getActiveCell(); 
    var row = sheet.getActiveRange().getRow(); 
    var col = cell.getA1Notation().replace(/[0-9]/g,'').toLowerCase(); 
    Logger.log('col = '+col); 
    var cellValue = cell.getValue().toString().toLowerCase(); 
    Logger.log(cellValue); 
    var recipients = "[email protected]"; 
    var message = ''; 
    Logger.log(cellValue=="yes" && col=='f'); 
    if(cellValue=="yes" && col=='f'){ 
    message = sheet.getRange('A'+ sheet.getActiveCell().getRowIndex()).getValue() 
    var subject = 'A cell value '+ sheet.getRange('A'+ sheet.getActiveCell().getRowIndex()).getValue() + ' has been received'; 
    var body = sheet.getName() + ' has been updated. Visit ' + ss.getUrl() + ' to view the changes on row: «' + row + '». New comment: «' + cellValue + '». For message: «' + message + '»'; 
// MailApp.sendEmail(recipients, subject, body) 
    Browser.msgBox('mail sent'); 
    } 
    Logger.log('message body: ' + body); 
}; 
+0

Это так! Большое спасибо, Серж! явно предстоит пройти долгий путь, прежде чем я смогу правильно закодировать. знак равно – Lonememe

0

Чтобы настроить использование объекта события:

function sendNotification(e) { 
    var received = e.value; //Gets the value of the edited cell 
}; 

Код который отправляет электронное письмо, является снаружиif тела. Поэтому письмо отправляется независимо от того, что.

Изменить это:

if(received==="Yes"){ 
    message = sheet.getRange('A'+ sheet.getActiveCell().getRowIndex()).getValue() 

    var subject = 'A cell value '+ sheet.getRange('A'+ sheet.getActiveCell().getRowIndex()).getValue() + ' has been received'; 
    var body = sheet.getName() + ' has been updated. Visit ' + ss.getUrl() + ' to view the changes on row: «' + row + '». New comment: «' + cellvalue + '». For message: «' + message + '»'; 
    MailApp.sendEmail(recipients, subject, body); 
}; 

В этой строке кода:

if(received="Yes"){ 

Вы используете оператор присваивания для проверки равенства. Проверка равенства выполняется с двойными или тройными равными знаками.

Должно быть:

if(received==="Yes"){ 
+0

Спасибо! Я просто добавил знак тройного равенства, но, к сожалению, он все равно отправляет электронное письмо в любое время, когда значение изменяется в ячейке в столбце K, а не только тогда, когда значение равно «Да». – Lonememe

+0

См. Обновленный ответ –

+0

Спасибо за это. Я изменил его (мне пришлось добавить закрытие «}» к вашему коду) к вашему предложению. Тем не менее, он по-прежнему просто отправляет сообщения независимо от того, какое изменение находится в столбце. Я такой тупой ... – Lonememe