【问题标题】:Delete Google Calendar events based on event title根据活动标题删除 Google 日历活动
【发布时间】:2020-07-14 10:44:36
【问题描述】:

由于某种原因,在我的日历中创建了一系列不被视为重复事件的事件。由于我们谈论的是未来 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();
     }
}

【问题讨论】:

  • 使用数字创建日期的方式是 2020 年 8 月 13 日至 18 日,而不是 7 月。是这个问题吗?尝试以字符串形式输入日期,例如new Date("2020-07-13")
  • @dwmorrin 感谢您的建议,它帮助解决了第一部分:删除指定时间范围内的所有事件。
  • 对@dwmorrin 评论的引用:在Javascript 中months0 开头。此外,如果您有多个名为“Test”的日历,请小心,因为您可能访问了错误的日历。

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


【解决方案1】:

确保正确设置日期并查询creators[]

  • 正如 cmets 向您提出的问题和代码中的注释所指出的那样 - Javascript counts the months0 开头
  • 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();
    }
  }
}

【讨论】:

    【解决方案2】:

    好的,我想我设法解决了。我能够删除与特定创作者和标题相关联的特定事件。其他名称相同但创作者不同的活动仍在议程中。

    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-07-13"); 
        var toDate = new Date("2020-07-18");
        var calendar = CalendarApp.getCalendarsByName(calendarName)[0];
        var events = calendar.getEvents(fromDate, toDate);
        for(var i=0; i<events.length;i++){
            var ev = events[i];
            if(ev.getTitle()=="EventX" & ev.getCreators()=="xyz@gmail.com"){
            // show event name in log
            Logger.log(ev.getTitle()); 
            ev.deleteEvent();
         }
    }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-06-30
      • 2022-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-04
      相关资源
      最近更新 更多