google-apps-script - CalendarEventSeries,缺少 setRecurrence() 方法?

标签 google-apps-script

Google 脚本文档指出 CalendarEventSeries 应至少有两个方法setRecurrence()。当我尝试使用它时:

setRecurrence(new Date(), CalendarApp.newRecurrence().addYearlyRule().interval(1));

我收到此错误:

Cannot find method (class)setRecurrence(object,$Proxy754). (line 60, file "Sync").

该方法肯定会在 CalendarEventSeries 上调用。如何解决该错误?

最佳答案

您显示的示例适用于 all day Events (仅指定第一次发生的日期),您是申请此类事件还是“正常”事件?

在最后一种情况下,您应该为第一次出现提供 2 个日期(开始和结束)。

上面的链接显示了非常清楚的文档...

这是一个“端到端”示例,展示了它的工作原理,第一个函数创建一个从今天开始每年重复发生的事件,第二个函数将此重复更改为从今天开始每天......

它使用您的默认日历

function createTestSerie(){
  var cal = CalendarApp.getDefaultCalendar()
  if (cal) {
  var title = 'Test Event';
  var desc = 'Created using Google Apps Script';
  var loc = 'Here, there and everywhere...';
  var recur = CalendarApp.newRecurrence().addYearlyRule().interval(1)
  var start = new Date();
  var end = new Date(start.valueOf()+3600*1000);

  var event = cal.createEventSeries(title, start, end,recur,{description:desc,location:loc});// event will be every year and last 1 hour
  }   
}

function modifyRecurrence(){
  var cal = CalendarApp.getDefaultCalendar()
  if (cal) {
  var start = new Date();
  var end = new Date(start.getTime()+3600*1000*2);
  var events = cal.getEvents(new Date("February 16, 2013 08:00:00 PDT"), new Date("February 19, 2013 08:00:00 PDT"))
    for(i in events){
     if(events[i].getTitle()=='Test Event'){
       var recur = CalendarApp.newRecurrence().addDailyRule().interval(1)
       var eventId = events[i].getId()
       cal.getEventSeriesById(eventId).setRecurrence(recur, start, end);// now events will be lasting 2 hours evey day starting today
       }
   }
   }
}

根据您的评论进行编辑:它的工作原理与 allDayEvents 完全相同,这里是修改后的示例代码:

function createAllDaySerie(){
  var cal = CalendarApp.getDefaultCalendar()
  if (cal) {
  var title = 'All Day Test Event';
  var start = new Date();
  var desc = 'Created using Google Apps Script';
  var loc = 'home';
  var recur = CalendarApp.newRecurrence().addYearlyRule().interval(4)
  var start = new Date();
  var event = cal.createAllDayEventSeries(title, start,recur,{description:desc,location:loc});// event will be every 4 years starting today
  }   
}

function modifyAllDayRecurrence(){
  var cal = CalendarApp.getDefaultCalendar()
  if (cal) {
  var start = new Date("February 19, 2010 08:00:00 PDT");// here you can choose any date you like that will be the new start date.
  var events = cal.getEvents(new Date("February 16, 2013 08:00:00 PDT"), new Date("February 22, 2013 08:00:00 PDT"))
    for(i in events){
     if(events[i].getTitle()=='All Day Test Event'){
       var recur = CalendarApp.newRecurrence().addYearlyRule().interval(1)
       var eventId = events[i].getId()
       cal.getEventSeriesById(eventId).setRecurrence(recur, start);// now events will occur once a year starting on february 19, 2010 (see screen capture below)
       }
   }
   }
}

enter image description here

关于google-apps-script - CalendarEventSeries,缺少 setRecurrence() 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14920613/

相关文章:

google-apps-script - 我的 iframe 在已发布的 Web 应用程序/侧边栏中在哪里?

ios - 在 iOS 中访问和操作 Google 表格

javascript - 使用缓存提高脚本的速度

google-apps-script - 通过服务帐户使用高级 Google 服务

javascript - 全局保存数组

google-apps-script - 尝试使用 GmailApp.sendEmail - 缺少授权访问 token

google-apps-script - 将 Google 文档脚本更新到 Google 云端硬盘(将带有标签的电子邮件存档到云端硬盘)

google-apps-script - Google应用脚本和Websocket?

google-apps-script - 如何使用 onEdit 函数触发电子邮件

image - Google 脚本调整图像大小