有人能够确定发生了什么事吗?这似乎是某种类型的循环错误,但我自己也不确定。
我收到的“异常:找不到范围”错误消息引用了以下行:
rows.forEach(function(row)
和
var eventEmail = eventsData.getRange(row[5]).getValue();
。
我的专栏设置为: 复选框列 标题 开始日期 结束日期 描述 电子邮件 联络人
function SendEmails ()
{
// Extract events data
var eventsData = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("SHEET_NAME");
var rows = eventsData.getDataRange().getValues();
var templateText = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("SHEET_NAME_2").getRange(1, 1).getValue();
// Discount header row
var headers = rows.shift();
// Identify only rows that are checked to apply function and run log
rows.forEach(function(row)
{
if(row[0])
{
Logger.log(JSON.stringify(row));
// Extract reminder template and send reminder emails for selection
var eventEmail = eventsData.getRange(row[5]).getValue();
var eventTitle = eventsData.getRange(row[1]).getValue();
var eventPOC = eventsData.getRange(row[6]).getValue();
var eventDesc = eventsData.getRange(rows[4]).getValue();
var messageBody = templateText.replace("{name}",eventPOC).replace("{title}",eventTitle).replace("{description}",eventDesc);
var subjectLine = "Reminder: " + eventTitle + " Upcoming Event";
MailApp.sendEmail(eventEmail, subjectLine, messageBody);
}
});
}
此函数一直有效,直到我进行了一些编辑,以便它仅针对选中复选框的行运行。
它似乎成功地识别了已选中复选框的行。它似乎也贯穿了第一个循环,但之后发生了一些我无法识别的事情。
我尝试更改范围引用以确保引用正确的列。
我感谢任何指导!
看起来问题出在这行和类似的行上:
eventsData.getRange(row[5]).getValue()
。您已经从电子表格中提取了值,因此您可以直接使用 row
数组,如下所示:var eventEmail = row[5]
。
这是更新后的代码:
function SendEmails() {
// Extract events data
var eventsData =
SpreadsheetApp.getActiveSpreadsheet().getSheetByName("SHEET_NAME");
var rows = eventsData.getDataRange().getValues();
var templateText = SpreadsheetApp.getActiveSpreadsheet()
.getSheetByName("SHEET_NAME_2")
.getRange(1, 1)
.getValue();
// Discount header row
var headers = rows.shift();
// Identify only rows that are checked to apply function and run log
rows.forEach(function (row) {
if (row[0]) {
Logger.log(JSON.stringify(row));
// Extract reminder template and send reminder emails for selection
var eventEmail = row[5];
var eventTitle = row[1];
var eventPOC = row[6];
var eventDesc = rows[4];
var messageBody = templateText
.replace("{name}", eventPOC)
.replace("{title}", eventTitle)
.replace("{description}", eventDesc);
var subjectLine = "Reminder: " + eventTitle + " Upcoming Event";
MailApp.sendEmail(eventEmail, subjectLine, messageBody);
}
});
}