首页 > 解决方案 > 根据活动标题删除 Google 日历活动

问题描述

出于某种原因,在我的日历中创建了一系列不被视为重复事件的事件。由于我们谈论的是未来 3 年每周 2 次活动,我期待 Google Apps 脚本从我的日历中删除这些活动。

这些事件有一个单一的特定名称,由我创建。我想删除将来具有该特定名称并由我创建的所有事件。

由于我对脚本完全陌生,因此我尝试了下面的示例代码。不幸的是,它在我设置的测试日历中没有做任何事情(测试)。Google Apps 脚本中的调试选项不会生成任何错误或消息。运行脚本也不会生成任何日志...

那么,谁能帮助指出下面的代码有什么问题,以及如何根据事件标题和该事件的创建者删除特定事件?

function delete_events()
{
    var calendarName = 'Test';
    // for month 0 = Jan, 1 = Feb etc
    // below delete from Jul 13 2020 to Jul 18 2020
    var fromDate = new Date(2020,7,13,0,0,0); 
    var toDate = new Date(2020,7,18,0,0,0);
    var calendar = CalendarApp.getCalendarsByName(calendarName)[0];
    var events = calendar.getEvents(fromDate, toDate);
    for(var i=0; i<events.length;i++){
        var ev = events[i];
        // show event name in log
        Logger.log(ev.getTitle()); 
        ev.deleteEvent();
     }
}

标签: google-apps-scriptgoogle-calendar-api

解决方案


确保正确设置日期并查询创作者[]

  • 正如对您的问题的评论和代码中的评论所指出的那样 - Javascript计算0
  • Apps 脚本具有getCreators()返回给您一个数组(!)的方法,其中可能包含多个创建者
  • 因此,您不能与 进行比较==,但需要使用indexOf()

样本:

function delete_events()
{
  var calendarName = 'Test';
  var myEmail = "YOUR EMAIL";
  var myTitle = "Hello";
  // for month 0 = Jan, 1 = Feb etc
  // below delete from now to Jul 18 2020
  var now = new Date(); 
  var toDate = new Date(2020,6,18,0,0,0);
  var calendar = CalendarApp.getCalendarsByName(calendarName)[0];
  var events = calendar.getEvents(now, toDate);
  for(var i=0; i<events.length;i++){
    var ev = events[i];
    // show event name in log
    Logger.log(ev.getTitle()); 
    var creators = ev.getCreators();
//check if you are the calendar creator and the event title matches
    if(creators.indexOf(myEmail) >-1 && ev.getTitle() == myTitle){
      ev.deleteEvent();
    }
  }
}

推荐阅读