Google脚本在日历之间移动事件:Calendar.Events.move找不到事件 [英] Google scripts moving events between calendars: Calendar.Events.move can't find event
问题描述
[注意:更新以更好地反映对问题的理解]
我正在尝试使用Google Scripts将所有事件从一个Google日历移动到另一个。
我编写了以下代码:
function move_all_events()
{
var fromYear = 2016;
var toYear=2020
var fromDate = new Date(fromYear,0,1,0,0,0); //Year, Month (where 0 = Jan, 1 = Feb...), Hour, Min, Sec, Millisecond
var toDate = new Date(toYear,1,0,0,0);
var fromCalendarName = 'Calendar1';
var toCalendarName = 'Calendar2';
// Move from start of fromYear to start of toYear (for month 0 = Jan, 1 = Feb...)
var fromCalendar = CalendarApp.getCalendarsByName(fromCalendarName)[0];
var toCalendar = CalendarApp.getCalendarsByName(toCalendarName)[0];
var fromCalendarId = fromCalendar.getId();
var toCalendarId = toCalendar.getId();
Logger.log(fromCalendarId);
Logger.log(toCalendarId);
var events = fromCalendar.getEvents(fromDate, toDate);
for(var i=0; i<events.length;i++){
var evId = events[i].getId().replace("@google.com", "");
Logger.log(evId); // show event Id in log
Calendar.Events.move(fromCalendarId, evId, toCalendarId);
}
}
当从Google日历中手动创建要移动的事件时,上面的代码运行良好。
但是,当要移动的事件在ical/ics文件中外部创建,然后导入到Google日历中时,代码会失败。
当我运行代码时,我收到以下错误:
API call to calendar.events.move failed with error: Not Found (line 86, file "Code")
其中第86行是包含Calendar.Events.Move的行。
注意日志显示:
[20-04-24 01:26:15:031 EDT] myname@gmail.com
[20-04-24 01:26:15:032 EDT] asfdsfdsfdsfekwlkkllkpauc700@group.calendar.google.com
[20-04-24 01:26:15:986 EDT] myeventidprefix-a3a597f53ff059959e950fc513df33af
所有内容看起来都"正确",实际上,事件ID与我在外部创建的ICS文件中创建的UID完全相同,然后导入该文件。
但不知何故,Calendar.Events.Move似乎无法在FromCalendar中找到事件本身。
您知道这里出了什么问题吗?
我注意到的第二个问题是,即使例程起作用(例如,对于在Google Calendar中创建的事件),"通知"也不会移动。也就是说,如果我在带通知的FromCalendar中创建事件,则在To Calendar中移动的事件会丢失通知。请注意,两个日历通常都没有打开事件或"全天"通知。
有趣的是,如果我将同一事件移回FromCalendar,通知会神奇地重新出现。
您知道为什么通知在内部看起来仍然完好无损,但与其他事件数据一起不可见
推荐答案
OK-我解决了第一部分。 问题在于,对于导入的iCal事件,iCal UID与谷歌事件ID不同。具体而言,.getId()返回iCal UID,而函数Calendar.Events.move需要谷歌事件ID,可以通过:Calendar.Events.list(fromCalendarId).items
检索该ID参见:How can I find the Event Id of my Google Calendar event?
这当然不是本机事件的问题,因为ID是相同的,这解释了为什么我的原始代码可以用于本机事件。
修订代码如下:
for(var i=0; i<events.length; i++){
var evId = events[i].id;
Logger.log(i + ": " + evId); // show event Id in log
Calendar.Events.move(fromCalendarId, evId, toCalendarId); //Note need to turn on Calendar API under Resources
}
然而,这移动了一些但不是所有的事件,这是很奇怪的…我看不到任何模式。事实上,在许多类似的事件中,一些被感动了,另一些则没有。
(另外,如上所述,通知不会像前面提到的那样移动。)
这篇关于Google脚本在日历之间移动事件:Calendar.Events.move找不到事件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!