获取 Google 日历事件的 eventID
Get eventID for Google Calendar Event
我想借助 google 脚本从特定事件中获取 eventID。我目前正在使用这个变量:
function export_gcal_to_gsheet(){
// Reference Websites:
// https://developers.google.com/apps-script/reference/calendar/calendar
// https://developers.google.com/apps-script/reference/calendar/calendar-event
//
var mycal = "info@neugier.schule";
var cal = CalendarApp.getCalendarById(mycal);
var today = new Date()
var thisweek = new Date (today.getTime())
var oneWeekfromNow = new Date(today.getTime() + (7*3600000*24));
//
var events = cal.getEvents(thisweek, oneWeekfromNow, {search: 'stammtisch'});
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Termine");
// Uncomment this next line if you want to always clear the spreadsheet content before running - Note people could have added extra columns on the data though that would be lost
//sheet.clearContents();
// Create a header record on the current spreadsheet in cells A1:N1 - Match the number of entries in the "header=" to the last parameter
// of the getRange entry below
var header = [["Event Title", "Event Start", "Thema", "LinkZoom", "EventID"]]
var range = sheet.getRange(1,1,1,5);
range.setValues(header);
// Loop through all calendar events found and write them out starting on calulated ROW 2 (i+2)
for (var i=0;i<events.length;i++) {
var row=i+2;
var myformula_placeholder = '';
// Matching the "header=" entry above, this is the detailed row entry "details=", and must match the number of entries of the GetRange entry below
// NOTE: I've had problems with the getVisibility for some older events not having a value, so I've had do add in some NULL text to make sure it does not error
var details=[[events[i].getTitle(), Utilities.formatDate(events[i].getStartTime(),'Europe/Berlin', 'dd.MM.yyyy,\' um\' HH:mm\'Uhr\''), events[i].getDescription(), events[i].getLocation(), events[i].getId()]];
var range=sheet.getRange(row,1,1,5);
range.setValues(details);
}
}
但 getId 似乎与事件 ID 不同,因为当我将 ID 插入此 link 时:https://www.google.com/calendar/event?eid={event-id}&ctz={timezone}
我收到一个错误。此外,当我手动共享我的事件时,我看到的 ID 与我从脚本中获得的 ID 不同。
希望有人能帮帮我。
我了解到您希望 event-id
使用 https://www.google.com/calendar/event?eid={event-id}&ctz={timezone}
。我的理解正确吗?如果我的理解是正确的,这个修改怎么样?
修改点:
- 为了检索
https://www.google.com/calendar/event?eid={event-id}&ctz={timezone}
的 event-id
,您可以使用日历 API 的 Calendar.Events.list()
检索它。
准备使用此修改后的示例脚本:
当您使用此修改后的脚本时,请在高级 Google 服务和 API 控制台启用日历 API。
在高级 Google 服务中启用日历 API v3
- 在脚本编辑器上
- 资源 -> 高级 Google 服务
- 打开日历 API v3
Enable Calendar API at API console
- 在脚本编辑器上
- 资源 -> 云平台项目
- 查看API控制台
- 在开始时,单击启用 APIs 并获取密钥等凭据。
- 在左侧,单击“库”。
- 在搜索 API 和服务时,输入 "Calendar"。然后单击日历 API。
- 单击“启用”按钮。
- 如果API已经启用,请不要关闭。
- 当你运行这个脚本时,如果发生错误,你可能需要等待几分钟,直到API被启用。
修改脚本:
function export_gcal_to_gsheet(){
var mycal = "info@neugier.schule";
var cal = CalendarApp.getCalendarById(mycal);
var today = new Date()
var thisweek = new Date (today.getTime())
var oneWeekfromNow = new Date(today.getTime() + (7*3600000*24));
var events = cal.getEvents(thisweek, oneWeekfromNow, {search: 'stammtisch'});
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Termine");
var header = [["Event Title", "Event Start", "Thema", "LinkZoom", "EventID"]]
var range = sheet.getRange(1,1,1,5);
range.setValues(header);
// Added
var items = Calendar.Events.list(mycal, {
timeMin: thisweek.toISOString(),
timeMax: oneWeekfromNow.toISOString(),
q: 'stammtisch'
}).items;
for (var i=0;i<events.length;i++) {
var row=i+2;
var myformula_placeholder = '';
var details=[[events[i].getTitle(), Utilities.formatDate(events[i].getStartTime(),'Europe/Berlin', 'dd.MM.yyyy,\' um\' HH:mm\'Uhr\''), events[i].getDescription(), events[i].getLocation(), items[i].htmlLink.split("=")[1]]]; // Modified
var range=sheet.getRange(row,1,1,5);
range.setValues(details);
}
}
注:
- 此修改后的脚本从
Calendar.Events.list()
中检索 htmlLink
。 link 是 https://www.google.com/calendar/event?eid={event-id}
。现在我从 link 中检索了 event-id
以使用 items[i].htmlLink.split("=")[1]
匹配您的脚本。如果您想要link,请修改为items[i].htmlLink
。
参考资料:
如果我误解了你的问题,我很抱歉。
我想借助 google 脚本从特定事件中获取 eventID。我目前正在使用这个变量:
function export_gcal_to_gsheet(){
// Reference Websites:
// https://developers.google.com/apps-script/reference/calendar/calendar
// https://developers.google.com/apps-script/reference/calendar/calendar-event
//
var mycal = "info@neugier.schule";
var cal = CalendarApp.getCalendarById(mycal);
var today = new Date()
var thisweek = new Date (today.getTime())
var oneWeekfromNow = new Date(today.getTime() + (7*3600000*24));
//
var events = cal.getEvents(thisweek, oneWeekfromNow, {search: 'stammtisch'});
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Termine");
// Uncomment this next line if you want to always clear the spreadsheet content before running - Note people could have added extra columns on the data though that would be lost
//sheet.clearContents();
// Create a header record on the current spreadsheet in cells A1:N1 - Match the number of entries in the "header=" to the last parameter
// of the getRange entry below
var header = [["Event Title", "Event Start", "Thema", "LinkZoom", "EventID"]]
var range = sheet.getRange(1,1,1,5);
range.setValues(header);
// Loop through all calendar events found and write them out starting on calulated ROW 2 (i+2)
for (var i=0;i<events.length;i++) {
var row=i+2;
var myformula_placeholder = '';
// Matching the "header=" entry above, this is the detailed row entry "details=", and must match the number of entries of the GetRange entry below
// NOTE: I've had problems with the getVisibility for some older events not having a value, so I've had do add in some NULL text to make sure it does not error
var details=[[events[i].getTitle(), Utilities.formatDate(events[i].getStartTime(),'Europe/Berlin', 'dd.MM.yyyy,\' um\' HH:mm\'Uhr\''), events[i].getDescription(), events[i].getLocation(), events[i].getId()]];
var range=sheet.getRange(row,1,1,5);
range.setValues(details);
}
}
但 getId 似乎与事件 ID 不同,因为当我将 ID 插入此 link 时:https://www.google.com/calendar/event?eid={event-id}&ctz={timezone}
我收到一个错误。此外,当我手动共享我的事件时,我看到的 ID 与我从脚本中获得的 ID 不同。
希望有人能帮帮我。
我了解到您希望 event-id
使用 https://www.google.com/calendar/event?eid={event-id}&ctz={timezone}
。我的理解正确吗?如果我的理解是正确的,这个修改怎么样?
修改点:
- 为了检索
https://www.google.com/calendar/event?eid={event-id}&ctz={timezone}
的event-id
,您可以使用日历 API 的Calendar.Events.list()
检索它。
准备使用此修改后的示例脚本:
当您使用此修改后的脚本时,请在高级 Google 服务和 API 控制台启用日历 API。
在高级 Google 服务中启用日历 API v3
- 在脚本编辑器上
- 资源 -> 高级 Google 服务
- 打开日历 API v3
Enable Calendar API at API console
- 在脚本编辑器上
- 资源 -> 云平台项目
- 查看API控制台
- 在开始时,单击启用 APIs 并获取密钥等凭据。
- 在左侧,单击“库”。
- 在搜索 API 和服务时,输入 "Calendar"。然后单击日历 API。
- 单击“启用”按钮。
- 如果API已经启用,请不要关闭。
- 当你运行这个脚本时,如果发生错误,你可能需要等待几分钟,直到API被启用。
修改脚本:
function export_gcal_to_gsheet(){
var mycal = "info@neugier.schule";
var cal = CalendarApp.getCalendarById(mycal);
var today = new Date()
var thisweek = new Date (today.getTime())
var oneWeekfromNow = new Date(today.getTime() + (7*3600000*24));
var events = cal.getEvents(thisweek, oneWeekfromNow, {search: 'stammtisch'});
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Termine");
var header = [["Event Title", "Event Start", "Thema", "LinkZoom", "EventID"]]
var range = sheet.getRange(1,1,1,5);
range.setValues(header);
// Added
var items = Calendar.Events.list(mycal, {
timeMin: thisweek.toISOString(),
timeMax: oneWeekfromNow.toISOString(),
q: 'stammtisch'
}).items;
for (var i=0;i<events.length;i++) {
var row=i+2;
var myformula_placeholder = '';
var details=[[events[i].getTitle(), Utilities.formatDate(events[i].getStartTime(),'Europe/Berlin', 'dd.MM.yyyy,\' um\' HH:mm\'Uhr\''), events[i].getDescription(), events[i].getLocation(), items[i].htmlLink.split("=")[1]]]; // Modified
var range=sheet.getRange(row,1,1,5);
range.setValues(details);
}
}
注:
- 此修改后的脚本从
Calendar.Events.list()
中检索htmlLink
。 link 是https://www.google.com/calendar/event?eid={event-id}
。现在我从 link 中检索了event-id
以使用items[i].htmlLink.split("=")[1]
匹配您的脚本。如果您想要link,请修改为items[i].htmlLink
。
参考资料:
如果我误解了你的问题,我很抱歉。