我有一列包含用于信号的某些文本。 当列中的单元格值包含文本“ Signal1”或“ Singal2”时,请发送标题为“找到信号”的电子邮件。 扫描列时,可以忽略期望“ Signal1”或“ Signal2”的任何其他单元格。
这是我到目前为止所拥有的,但仅用于一个单元的一个信号:
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列
Row11:布朗,丹佛,1967年,23日,11:00、34等...
电子表格始终有29行,其中第一行是标题。 电子表格有9列(A-H)。
答案 0 :(得分:0)
Go Short
或Go Long
时,您要检索行。
如果我的理解是正确的,那么该修改如何?
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 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
。如果我误解了您的问题,而这不是您想要的结果,我深表歉意。