我在Google Apps脚本中有一个Calendar Event,我希望允许用户点击一个Anchor来打开它。 我想我的URL必须如下所示:http://www.google.com/calendar/event?eid=SOMEID&ctz=Etc/GMT。 但是,我似乎无法从日历事件中获取所需的ID。我从Event.getId()获取的ID在这些URL中不起作用,并且没有event.getUrl()。
有人知道这是否可以使用应用脚本?
答案 0 :(得分:14)
对于CalendarEvent类型和event
类型的给定calendarId
对象,构建网址以查看/编辑Google Calendar App中相应事件的最简单且有效的方法如下:< / p>
var splitEventId = event.getId().split('@');
var eventURL = "https://www.google.com/calendar/event?eid=" + Utilities.base64Encode(splitEventId[0] + " " + calendarId);
最棒的是,不需要Google API调用,身份验证......!
答案 1 :(得分:1)
新版Google日历打破了这一局面。以下是修复方法:
var mycal = 'username@m'
var splitEventId = event.getId().split('@');
var eventUrl = "https://www.google.com/calendar/event?eid=" +
Utilities.base64Encode(splitEventId[0] + " " + mycal).toString().replace('=','');
答案 2 :(得分:1)
好的...在2020年,如果有人仍在为此奋斗的情况下,这是该版本的工作版本...
var calendarID = "somec@lend.ar";
var event = CalendarApp.getCalendarById(calendarID).createEvent(/*SOME OPTIONS HERE*/);
var splitEventId = event.getId().split('@');
// Open the "edit event" dialog in Calendar using this URL:
var event_EDIT_URL = "https://calendar.google.com/calendar/r/eventedit/" + Utilities.base64Encode(splitEventId[0] + " " + calendarID).replace("==",'');
// Open the "view this event in a Calendar" using this URL:
var event_VIEW_IN_CAL_URL = "https://www.google.com/calendar/event?eid=" + Utilities.base64Encode(splitEventId[0] + " " + calendarID).replace("==",'');
return event_EDIT_URL; // OR return event_VIEW_IN_CAL_URL;
答案 3 :(得分:0)
确实不可能。应用程序脚本问题跟踪器上有一个增强请求,提到了这种错误。您可能想要启动它以跟踪更新和投票类型。
答案 4 :(得分:0)
我注意到事件ID有两种类型,
创建一系列事件时,只有一个链接可以传递yyyy/mm/dd
的参数,另一个链接将忽略给定的日期,而只是默认为今天的日期。
转到11月,然后单击“计算机类”活动,单击“更多详细信息”,它将带您到: https://calendar.google.com/calendar/r/month/2018/10/29?eid=MWVqMjBjYmFhMGVrMnA3YTB0bGN0ajJjNzhfMjAxODEwMjlUMjMzMDAwWiB2cGFhY2FkZW15LmNvbV9pZDE4Mm83ZTgyajdmNGVzNWpyZWZpbmsyZ0Bn&ctz=America/New_York&sf=true
但是通过获取eid的Bas64可以返回 https://calendar.google.com/calendar/r/month/2018/10/29?eid=MWVqMjBjYmFhMGVrMnA3YTB0bGN0ajJjNzggdnBhYWNhZGVteS5jb21faWQxODJvN2U4Mmo3ZjRlczVqcmVmaW5rMmdAZ3JvdXAuY2FsZW5kYXIuZ29vZ2xlLmNvbQ= 忽略了传入的日期,我如何获得该ID?
答案 5 :(得分:0)
使用Google日历网络界面为Google日历创建事件时,eventId类似于:
7ik7jal8upcnqu30koq3ctj4tn@google.com
,并可以使用以下内容获取事件的网址:
var calendarId = 'domain.ac.uk_6l495bdvjmo1felggasrvclkc4@group.calendar.google.com';
var eventId = '7ik7jal8upcnqu30koq3ctj4tn@google.com';
var splitEventId = eventId.split('@');
var eventURL = 'https://calendar.google.com/calendar/r/eventedit/' + Utilities.base64Encode(splitEventId[0] + ' ' + calendarId);
//Or for a recurring event
var event = CalendarApp.getCalendarById(calendarId).getEventById(eventId);
var moment = Moment.moment;
var startTime = moment(event.getStartTime()).utc().format('YMMDDTHHmmss')+'Z';
var eventURL = 'https://calendar.google.com/calendar/r/eventedit/' + Utilities.base64Encode(splitEventId[0] + '_' +startTime+ ' ' + calendarId);
不幸的是,相同的方法不适用于在Outlook桌面中创建的同一日历中的事件,而是产生如下的eventId:
040000008200E00074C5B7101A82E00800000000D0E138AFF4C6D501000000000000000010000000C70DD9E87FE9EB46BCE437A98E9CC5BF
因此,解决方案并不完整,但如今使用Outlook桌面的人数减少了。