【问题标题】:Copy a programmatically created recurring event?复制以编程方式创建的重复事件?
【发布时间】:2013-01-11 05:07:48
【问题描述】:

使用 Google Apps 脚本,我创建了一个包含复杂重复事件的日历。但是,我无法将该事件作为重复事件复制到另一个日历。 注意:循环规则不能通过网页界面生成或编辑。

举个真实的例子,假设用户想要从this publicly shared Google calendar 复制重复事件。该事件是一种模板事件,用于我的大学星期四课程的课程安排。

有两个困难阻止用户将重复事件复制到用户有权访问的另一个日历中:

  • 单击事件实例并说“复制到我的日历”只会复制该单个事件,即使该事件被定义为重复。这不是一个好的解决方案,因为用户必须这样做 10 次以上才能获得一个学期的所有事件。
  • 单击事件实例,然后单击“更多详细信息”,然后尝试在“更多操作”菜单(其中 xxxx 是用户拥有的日历)下尝试“复制到 xxxx”似乎可以工作。但是,点击保存时出现错误:“出现错误,请稍后再试。”

编辑这是活动在 Google 日历中的样子的屏幕截图(点击活动,“更多详细信息”)。

请注意,从学期开始到学期末的每个星期一都会定期举行此活动,但有几个例外。没有假期(例如,Mon 2013-02-25),但也包括 Wed 2013-02-27,课程将在哪一天提供,就好像它是星期一(根据大学课程安排)。

我再说一遍:重复活动在 Google 日历中看起来不错,但无法将它们完全复制到另一个日历中。

创建日历的 GAS 函数(并非所有代码都在这里):

function 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);
    }
  }

  // 排除所有假期
  for (var i = 0; i 

【问题讨论】:

  • 到目前为止,您使用 Google Apps 脚本做了什么?
  • @JacobJanTuinstra 你的意思是,我使用什么 API 调用来创建事件?
  • 是的。你认为 GAS 会解决它吗?
  • GAS 正好可以创建事件。当我有时间时,我会尝试发布它。然而,我的用例是用户不运行任何 GAS 来将这些特制事件“复制”到他们的日历中。使用 GAS 是因为复现的复杂性。例如,这条规则规定,课程是在学期开始和结束之间的每个星期一,除了假期列表,包括任何其他应该像星期一一样上课的日子。 (是的,我的大学有复杂的日历时间表)。我怀疑“复制”仅适用于简单的重复事件。
  • 如果您使用的是 Google 协作平台,那么您可以在日历下方创建一个按钮来添加所有重复发生的事件(说起来容易做起来难...)?

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


【解决方案1】:

另一种选择是尝试导出 ICA 并让用户导入它。您甚至可以使用某种链接按钮来完成这两项工作。以下是如何获取 google 事件的 ica 文件的示例;

http://google.com/calendar/ical/[CALENDARID]/public[orprivate 取决于]/full/[eventID].ics

这应该将代码提供给用户,他们可以手动将其导入到他们的日历中。您可以生成 URL 并向所有注册指定课程的学生发送电子邮件。

T

【讨论】:

  • 此外,还有一些方法可以通过 CLI 和 API 生成 ICA。您可以生成并附加到大量电子邮件....只是一个解决方法,直到谷歌修复问题。让我知道您的解决方案是什么,因为我正在做类似的事情。
  • 感谢您的回答。我想要复制重复事件的原因是在另一个用户的帐户中创建日历的代码由于权限而很笨拙。使用最新的 API,我认为这样做更容易(有权限)。我想我什至会尝试使用文档或电子表格的 Google 插件功能来做同样的事情。共享代码和获得权限在这些功能中得到了顺利处理。
【解决方案2】:

这似乎是 Google 日历中的一个错误,因为它无法复制复杂的定期规则。您可以使用 Google 日历界面中齿轮图标下的“发送反馈”链接向团队报告。

【讨论】:

  • 仅供参考,“发送反馈”没有出现在我运行的 Google Apps Academic 许可版本中,但我可以使用我的公共帐户报告错误。
猜你喜欢
  • 1970-01-01
  • 2019-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-03
  • 1970-01-01
  • 1970-01-01
  • 2011-11-15
相关资源
最近更新 更多