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

У меня есть столбец с определенным текстом, который я использую для сигналов. Когда значение ячейки в столбце имеет текст «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);
     }
 }

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

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

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

Тема: Обнаружены сигналы

Сообщение:

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

Ряд 11: Браун, Денвер, 23, 1967, 11:00, 34 и т. д.

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

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
84
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
  • Вы хотите получить строки, когда значения столбца «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);
  }
}

Примечание:

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

Очень элегантное решение, спасибо! Ваш код имеет смысл. Проблема только в том, что это не дает результата. На данный момент в электронной таблице есть более одного «Движение в короткую сторону» и нет «Двигаться в длинную сторону», но электронное письмо не отправляется...

Petrus 28.05.2019 21:18

@Petrus Спасибо за ответ. Я прошу прощения за неудобства. О ситуации с вашим ответным комментарием, в моей среде скрипт работает и письмо можно отправить. Так что, к сожалению, я не могу повторить вашу ситуацию. Можете ли вы предоставить образец электронной таблицы и сценарий для воспроизведения вашей ситуации? Конечно, пожалуйста, удалите вашу личную информацию. Я хотел бы подтвердить это. Если вы можете сотрудничать, чтобы решить вашу новую проблему, я рад.

Tanaike 29.05.2019 01:12

@Petrus Если вы не понимаете мой английский, скажите, пожалуйста. Я должен извиниться за это и изменить его. Потому что для решения вашей проблемы требуется дополнительная информация для воспроизведения вашей ситуации. Можете ли вы сотрудничать, чтобы решить вашу проблему?

Tanaike 02.06.2019 01:33

Спасибо за Ваш интерес. К сожалению, это не работает для меня. Теперь я сделал новую таблицу, чтобы снова протестировать:

Petrus 02.06.2019 08:34

@Petrus Спасибо за ответ и предоставление образца электронной таблицы. Я изменил сценарий, отражая различия между вашим первоначальным вопросом и вашей общей электронной таблицей. Не могли бы вы подтвердить это? Если вы используете модифицированный сценарий, используйте общую электронную таблицу. Я подтвердил, что скрипт работает для вашей общей электронной таблицы.

Tanaike 02.06.2019 10:24

Теперь это работает отлично! Спасибо за это отличное решение. Я надеюсь, что другие также выиграют от этого.

Petrus 02.06.2019 11:42

@Petrus Спасибо за ответ. Я рад, что ваша проблема была решена. И тебе спасибо.

Tanaike 02.06.2019 23:55

Другие вопросы по теме