google-apps-script | getEvents()的TypeError

时间:2019-04-10 23:07:18

标签: google-apps-script

我有一个名为“重要!!”的日历。当嵌入我的代码中时,它会导致它不起作用(没有错误,该函数什么也不做)。我认为这个问题是由!!造成的!名称末尾的字符,但我不知道该问题是什么或如何解决。我应该怎么做才能避免这个问题?

function myFunction() {  
var year = 2019;
var month = 0;

var fromDate = new Date(year,month,1,0,0,0);
var toDate = new Date(year,month,28,0,0,0);



  var theCalendar = CalendarApp.getCalendarsByName('IMPORTANT!!')[0];
  var events = theCalendar.getEvents(fromDate, toDate);


  for(var i = 0; i < events.length; i++){
    var ev = events[i];
    ev.deleteEvent();
  }

}

如何解决该错误,以便我的脚本将从2019年1月发布在'def'中的Google日历中删除所有事件。

1 个答案:

答案 0 :(得分:0)

getCalendarsByName()返回Calendar[],它是一个数组。因此,如果def的日历名称在您的日历中只有一个,那么如何进行修改?

发件人:

var theCalendar = CalendarApp.getCalendarsByName('def');

收件人:

var theCalendar = CalendarApp.getCalendarsByName('def')[0];

注意:

  • 如果您有多个具有相同日历名称的日历,我建议使用日历ID。
  • 要点是,当看到方法名称时,发现“ getCalendarsByName”的“ Calendars”是复数。这样,它可能会注意到将返回几个值。

参考:

编辑1:

关于您的新问题,如果events没有元素,则for循环不起作用。

我认为这可能是您发行新刊的原因。请对此进行确认。

theCalendar.getEvents(fromDate, toDate)可以检索事件的时间。 for循环中的eleteEvent()将起作用。

编辑2:

您可以使用以下脚本检索所有日历的日历ID和日历名称。

示例脚本:

var result = CalendarApp.getAllCalendars().map(function(e) {return {id: e.getId(), name: e.getName()}});
Logger.log(result);

结果:

[
  {
    "id": "### calendarId1 ###",
    "name": "### calendarName1 ###"
  },
  {
    "id": "### calendarId2 ###",
    "name": "### calendarName2 ###"
  },
  ,
  ,
  ,
]