使用 Google Apps 脚本,我创建了一个包含复杂重复事件的日历。但是,我无法将该事件作为重复事件复制到另一个日历。注意:循环规则不能通过网页界面生成或编辑。
举一个真实的例子,假设用户想要从这个公开共享的 Google 日历中复制定期事件。该活动是我大学星期四课程的课程表的一种模板活动。
以下是阻止用户将重复事件复制到用户有权访问的另一个日历中的两个困难:
- 单击事件的实例并说“复制到我的日历”仅复制该单个事件,即使该事件被定义为重复。这不是一个好的解决方案,因为用户必须这样做超过 10 次才能获得一个学期的所有事件。
- 单击事件的实例,然后单击“更多详细信息”,然后尝试在“更多操作”菜单(其中 xxxx 是用户拥有的日历)下尝试“复制到 xxxx”似乎可以工作。但是,点击保存时,出现错误:“出现错误,请稍后再试。”
编辑这里是事件在谷歌日历中的样子的屏幕截图(点击事件,“更多细节”)。
请注意,此重复事件是从学期开始到结束的每个星期一,但有几个例外。没有假期(例如Mon 2013-02-25),但也包括Wed 2013-02-27,这天课程将像星期一一样(根据大学课程安排)。
我再说一遍:重复的事件在 Google 日历中看起来不错,但它们不能在那里完全复制到另一个日历。
创建日历的 GAS 函数(并非所有代码都在这里):
函数 createCalendar(calendarName, courseCode, weekday, times, room, isLab) { Logger.log("最后一天:" + LAST_TRIMESTER_DATE); // 修改最后一天,使其不是午夜,而是在第二天之前,即 23:59:59 varadjustedLastDay = LAST_TRIMESTER_DATE; adjustedLastDay.setTime(adjustedLastDay.getTime() + (23*60*60*1000) + (59*60*1000) + (59*1000)); Logger.log("调整的最后一天:" +adjustedLastDay); var eventRecurrence = CalendarApp.newRecurrence(); eventRecurrence.addDailyRule().until(adjustedLastDay).interval(1).onlyOnWeekday(weekday); // 获取第一天的星期几 var weekdayOfFirstDay = Utilities.formatDate(FIRST_TRIMESTER_DATE, LONG_TIME_ZONE, "EEEE").toUpperCase(); // 如果此日历用于实验室,则排除第一周的天数 如果(isLab){ eventRecurrence.addDailyExclusion().times(1); } 别的 { // 这是一门课程,所以如果不是课程日,则排除第一天 // -- 这是一个错误,因为事件的“第一天”总是会尝试创建,即使它没有指定“onlyOnWeekday” if (weekdayOfFirstDay != weekday.toString()) { eventRecurrence.addDailyExclusion().times(1); // eventRecurrence.addDateExclusion(FIRST_TRIMESTER_DATE); } } // 排除所有假期 对于 (var i = 0; 我