Триггер OnChange при изменении на определенном листе, а не на любом листе рабочей книги - PullRequest
1 голос
/ 18 июня 2019

У меня есть вкладка под названием «Уведомление Инв» в документе листов, которая также имеет несколько других вкладок.Это вкладка, содержащая только 2 строки, вторая из которых обновляется последней отфильтрованной строкой диапазона из другой вкладки листа.

С другой стороны, у меня есть эта функция, которая отправляет электронные письма с захватом данныхиз 2-го ряда моей вкладки «Уведомление об уведомлении».

    function Email_NewInvs() {
  // Get the sheet where the data is, in sheet 'Notif Inv'
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Notif Inv");
  var startRow = 2; // First row of data to process since there is a header row
  var numRows = sheet.getRange(1,5).getValue(); // Number of rows to process is set by a formula which counts rows
  // Fetch the range of cells A2:B6 where the emails and messages are
  var dataRange = sheet.getRange(startRow, 1, numRows, 2)
  // Fetch values for each row in the Range to input into the mailing system
  var data = dataRange.getValues();
  // This processes the emails you want to send
  for (i in data) { var row = data[i];
      var emailAddress = row[0]; // First column is the email address
      var message = row[1]; // Second column is the message
      var subject = "Nueva Factura"; // This is the subject of the email
      // This parses the data for the email to send
      MailApp.sendEmail(emailAddress, subject, message);
   }
}

Моя цель - вызвать эту функцию, когда автоматически изменится 2-й ряд на вкладке «Уведомление об уведомлении».

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

Я также пытался изменитьимя функции для onChange (e), но она ничего не делает, когда во вкладке «Уведомление Инв» что-то меняется.

Есть ли обходной путь?

Большое спасибо

Ответы [ 2 ]

1 голос
/ 18 июня 2019

Требования:

Сценарий, использующий триггер onChange, должен запускаться только в том случае, если изменен лист "Notif Inv".


Решение:

Передайте событие изменения вашей функции и используйте getName() листа, чтобы определить, какой лист редактируется, а затем выполните оператор if на основе результата.


Пример:

function Email_NewInvs(e) {
  // Get the sheet where the data is, in sheet 'Notif Inv'
  var sheet = e.source.getActiveSheet();
  if (sheet.getName() === 'Notif Inv') {
    var startRow = 2; // First row of data to process since there is a header row
    var numRows = sheet.getRange(1,5).getValue(); // Number of rows to process is set by a formula which counts rows
    // Fetch the range of cells A2:B6 where the emails and messages are
    var dataRange = sheet.getRange(startRow, 1, numRows, 2)
    // Fetch values for each row in the Range to input into the mailing system
    var data = dataRange.getValues();
    // This processes the emails you want to send
    for (i in data) { 
      var row = data[i];
      var emailAddress = row[0]; // First column is the email address
      var message = row[1]; // Second column is the message
      var subject = "Nueva Factura"; // This is the subject of the email
      // This parses the data for the email to send
      MailApp.sendEmail(emailAddress, subject, message);
    }
  }
}

Пояснение:

Теперь мы используем объекты событий с вашей функцией Email_NewInvs(e), чтобы определить var sheet, чтобы мы могли проверить, какой лист был изменен:

var sheet = e.source.getActiveSheet();

Я добавил оператор if для проверки имени измененного листа:

if (sheet.getName() === 'Notif Inv') {

Таким образом, теперь скрипт будет запускаться только в том случае, если имя изменяемого листа совпадает с «Notif Inv».


Примечания:

  1. Вам нужно будет установить Устанавливаемый Триггер для этого сценария, чтобы у него достаточно прав для отправки писем.
  2. Вы НЕ сможете запустить этот скрипт вручную из скрипта Редактор, он будет запускаться автоматически при смене листа.

Ссылки

  1. Объекты событий
  2. Устанавливаемые триггеры
0 голосов
/ 18 июня 2019

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...