Автоматически отправлять электронную почту, когда ячейка в столбце имеет определенное значение - PullRequest
1 голос
/ 28 мая 2019

У меня есть столбец с определенным текстом, который я использую для сигналов.Когда значение ячейки в столбце имеет текст «Signal1» или «Singal2», отправьте электронное письмо с заголовком «Сигналы были найдены».При сканировании столбца любая другая ожидаемая ячейка для «Сигнал1» или «Сигнал2» может быть проигнорирована.

Это то, что я имею до сих пор, но только для одной ячейки один сигнал:

 function CheckSignals() {

   // Fetch data
   var dataRange = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Signal").getRange("H2:H29"); 
   var data = dataRange.getValue();

   // Check for signals
   if (data = "Go Short" || "Go Long"){

     // Fetch the email address and send
     var emailRange = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Email").getRange("C2");
     var emailAddress = emailRange.getValues();

     // Send Alert Email.
     var message = 'Signal1 ' + data; // Second column
     var subject = 'Signals were found';
     MailApp.sendEmail(emailAddress, subject, message);
     }
 }

Это работает, но это слишком просто ... Есть два сигнала, которые я должен сканироватьв столбце: «Singal1» и «Signal2».

Например, если был отсканирован столбец H, три «Signal1» и / или «Signal2» были найдены.Содержимое электронной почты должно содержать информацию из всей строки для каждой ячейки, в которой оно было найдено.

Пример электронной почты:

Тема: Сигналы найдены

Сообщение:

Сигнал 1 был обнаружен в следующих строках со следующими данными: строка 6: данные из строки 6 столбца A, данные из строки 6 столбца B, данные из строки 6 столбца C, данные из строки 6 столбца D, ... достолбец H

Строка11: Браун, Денвер, 23, 1967, 11:00, 34 и т. д. *

В электронной таблице всегда есть 29 строк, где первая строка - заголовки.В электронной таблице 9 столбцов (A - H).

1 Ответ

0 голосов
/ 28 мая 2019
  • Вы хотите получить строки, когда значения столбца "H2: H29" равны Go Short или Go Long.
    • Значения всегда в "A2: H29".
  • Вы хотите отправить полученные строки как одно электронное письмо.

Если мойпонимание правильное, как насчет этой модификации?

Точки модификации:

  • Сначала извлекаются значения "A2: H29".Затем извлекаются строки, включающие Go Short или Go Long в столбце «H».
  • В этом измененном сценарии, когда строки, включающие Go Short или Go Long в столбце «H», являютсяполучено, база сообщения создана.

Модифицированный скрипт:

function CheckSignals() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();

  // Fetch data
  var data = ss.getSheetByName("Signal").getRange("A2:H29").getValues();

  // Check for signals
  var contents = data.map(function(e, i) {return e[7] == "Go Short" || e[7] == "Go Long" ? e[7] + " Row " + (i + 2) + ": " + e.join(", ") : ""}).filter(String);

  if (contents.length > 0) {

    // Fetch the email address and send
    var emailRange = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Email").getRange("C2");
    var emailAddress = emailRange.getValues();

    // Send Alert Email.
    var message = contents.join("\n");
    var subject = 'Signals were found';
    MailApp.sendEmail(emailAddress, subject, message);
  }
}

Примечание:

  • Формат message отличается междуваш сценарий и ваш вопрос.Таким образом, в этой модификации используются обязательные значения, потому что я не мог понять, какой правильный вы хотите.Пожалуйста, измените это для вашей ситуации.
  • Я не мог понять о Second column из var message = 'Signal1 ' + data; // Second column.

Ссылки:

Если я неправильно понял ваш вопроси это был не тот результат, которого вы хотите, я извиняюсь.

Редактировать:

Из вашей общей таблицы я снова изменил ваш скрипт.Различия между вашим первоначальным вопросом и общей электронной таблицей заключаются в следующем.

  1. Значения Signal1, Signal2 и Go Short и Go Long не могут быть найдены в столбце "H".Эти значения можно увидеть в столбцах «D», «E», «F» и «G».
  2. В вашем сценарии в вашем вопросе используются Go Short и Go Long.Но в вашей общей электронной таблице используются Go short и Go long.

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

Измененный сценарий:

function CheckSignals() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();

  // Fetch data
  var data = ss.getSheetByName("Signal").getRange("A2:H29").getValues();

  // Check for signals
  var searchValues = ["Go short", "Go long"];
  var contents = data.map(function(row, i) {return searchValues.some(function(e) {return ~row.indexOf(e)}) ? row[7] + " Row " + (i + 2) + ": " + row.join(", ") : ""}).filter(String);

  if (contents.length > 0) {

    // Fetch the email address and send
    var emailRange = ss.getSheetByName("Email").getRange("C2");
    var emailAddress = emailRange.getValue();

    // Send Alert Email.
    var message = contents.join("\n");
    var subject = 'Signals were found';
    MailApp.sendEmail(emailAddress, subject, message);
  }
}

Примечание:

  • О формате выходных значений, я не мог понять оэто из вашего вопроса и ответа на комментарий.Поэтому я подготовил значения в качестве образца.Так что об этом, пожалуйста, измените для вашей ситуации.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...