在 forEach 循环中使用 getRange() 时出现“范围未定义”错误

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

我搜索了一些有关循环中 getRange() 错误的类似问题,但我仍然不确定最好的解决方案是什么。

遍历范围,将字符串附加到每个 在 Google 表格中找不到方法 getRange(int,int)

我的专栏设置为: 第 1 列复选框 第 2 栏事件 第 3 栏开始 第 4 栏结束 第 5 栏 说明 第 6 栏 电子邮件 第 7 栏 POC 第 8 列事件 ID

此脚本会遍历所有被检查的行,以确定是否存在当前的 eventID,如果不存在,则创建一个新的 eventID 并设置其值。

这就是错误的来源:

EventsData.getRange(row[7]).setValue(newEventID);

您能否给我一些关于如何最好地制定 getRange() 以包含循环的指导?

function ReplaceOrCreateEvent()
{ 
  var cal = CalendarApp.getCalendarById("calendarID");
  var EventsData = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('SHEET_NAME');
  var rows = EventsData.getDataRange().getValues();
  var headers = rows.shift();
  rows.forEach(function(row)
  {
    if(row[0])
    {
      Logger.log(JSON.stringify(row));
      var eventID = row[7];
      
      if(eventID != 0)
      {
        var event = cal.getEventById(eventID);
        event.deleteEvent();
        Logger.log(event);
      }
        var title = row[1];
        var desc = row[4];
        var tstart = row[2];
        var tstop = row[3];
        var newEvent = cal.createEvent(title, tstart, tstop, {description:desc});
        var newEventID = newEvent.getId();
        EventsData.getRange(row[7]).setValue(newEventID);
        Logger.log(newEventID);
    }
  });
}

我尝试为上述 getRange() 行设置静态值,它有效:

EventsData.getRange(2,8).setValue(newEventID);
但这不会循环。

我尝试过使用

EventsData.row[7].setValue(newEventID);
eventID.setValue(newEventID);
,但不起作用。

感谢您的关注!

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

当你的展示脚本修改后,下面的修改如何?

修改后的脚本:

通过此修改,

newEventID
的值被放入已处理行的“H”列中。

function ReplaceOrCreateEvent() {
  var cal = CalendarApp.getCalendarById("calendarID");
  var EventsData = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('SHEET_NAME');
  var rows = EventsData.getDataRange().getValues();
  var headers = rows.shift();
  rows.forEach(function (row, i) { // Modified
    if (row[0]) {
      Logger.log(JSON.stringify(row));
      var eventID = row[7];

      if (eventID != 0) {
        var event = cal.getEventById(eventID);
        event.deleteEvent();
        Logger.log(event);
      }
      var title = row[1];
      var desc = row[4];
      var tstart = row[2];
      var tstop = row[3];
      var newEvent = cal.createEvent(title, tstart, tstop, { description: desc });
      var newEventID = newEvent.getId();
      EventsData.getRange(i + 2, 8).setValue(newEventID); // Modified
      Logger.log(newEventID);
    }
  });
}
© www.soinside.com 2019 - 2024. All rights reserved.