sendEmails 函数中出现“未找到范围”错误且调试不够具体,无法识别

问题描述 投票:0回答:1

有人能够确定发生了什么事吗?这似乎是某种类型的循环错误,但我自己也不确定。

我收到的“异常:找不到范围”错误消息引用了以下行:

rows.forEach(function(row)
var eventEmail = eventsData.getRange(row[5]).getValue();

我的专栏设置为: 复选框列 标题 开始日期 结束日期 描述 电子邮件 联络人

enter image description here

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);
    }
  });
}

此函数一直有效,直到我进行了一些编辑,以便它仅针对选中复选框的行运行。

它似乎成功地识别了已选中复选框的行。它似乎也贯穿了第一个循环,但之后发生了一些我无法识别的事情。

我尝试更改范围引用以确保引用正确的列。

我感谢任何指导!

loops google-apps-script foreach range
1个回答
0
投票

看起来问题出在这行和类似的行上:

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);
    }
  });
}
© www.soinside.com 2019 - 2024. All rights reserved.