У меня есть столбец с определенным текстом, который я использую для сигналов. Когда значение ячейки в столбце имеет текст «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).
Go Short
или Go Long
.
Если я правильно понимаю, как насчет этой модификации?
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
.Если я неправильно понял ваш вопрос, и это не тот результат, который вы хотите, приношу свои извинения.
Из вашей общей электронной таблицы я снова изменил ваш сценарий. Различия между вашим первоначальным вопросом и общей электронной таблицей заключаются в следующем.
Signal1
, Signal2
и Go Short
и Go Long
не могут быть найдены в столбце «H». Эти значения можно увидеть в столбцах «D», «E», «F» и «G».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 Спасибо за ответ. Я прошу прощения за неудобства. О ситуации с вашим ответным комментарием, в моей среде скрипт работает и письмо можно отправить. Так что, к сожалению, я не могу повторить вашу ситуацию. Можете ли вы предоставить образец электронной таблицы и сценарий для воспроизведения вашей ситуации? Конечно, пожалуйста, удалите вашу личную информацию. Я хотел бы подтвердить это. Если вы можете сотрудничать, чтобы решить вашу новую проблему, я рад.
@Petrus Если вы не понимаете мой английский, скажите, пожалуйста. Я должен извиниться за это и изменить его. Потому что для решения вашей проблемы требуется дополнительная информация для воспроизведения вашей ситуации. Можете ли вы сотрудничать, чтобы решить вашу проблему?
Спасибо за Ваш интерес. К сожалению, это не работает для меня. Теперь я сделал новую таблицу, чтобы снова протестировать:
@Petrus Спасибо за ответ и предоставление образца электронной таблицы. Я изменил сценарий, отражая различия между вашим первоначальным вопросом и вашей общей электронной таблицей. Не могли бы вы подтвердить это? Если вы используете модифицированный сценарий, используйте общую электронную таблицу. Я подтвердил, что скрипт работает для вашей общей электронной таблицы.
Теперь это работает отлично! Спасибо за это отличное решение. Я надеюсь, что другие также выиграют от этого.
@Petrus Спасибо за ответ. Я рад, что ваша проблема была решена. И тебе спасибо.
Очень элегантное решение, спасибо! Ваш код имеет смысл. Проблема только в том, что это не дает результата. На данный момент в электронной таблице есть более одного «Движение в короткую сторону» и нет «Двигаться в длинную сторону», но электронное письмо не отправляется...