如何将我的 google 日历事件的 ID 转换为正确的格式,以便日历 API 在我的脚本中读取?
How do I get my google calendar event's ID into the right format for the Calendar API to read in my script?
我正在尝试编写一个脚本来执行以下两项操作:1) 根据我的 sheet 中提供的日期更新我的 Google 日历上现有活动的日期和标题 AND 2 ) 通过电子邮件将更新的日期发送给活动的客人(这样他们日历上的活动就会更新)。
我能够使用 CalendarApp.getEventById(eventId) 成功更新我的活动的日期和标题。但是,我 真的 喜欢在活动日期更新后向每位客人重新发送活动通知。使用 CalendarApp 似乎不可能做到这一点(如果可能,请告诉我怎么做!)。在这个 question 中苦苦挣扎之后,我现在尝试使用 Calendar.Events.patch 来更新活动并将更新发送给所有活动的客人。
我一直遇到的问题是我的sheet通过我的createEvent脚本记录的eventId的格式以“@[=35结尾=]。” CalendarApp 可以很好地读取此格式,但无法被 Calendar.Events.patch 读取。我已经尝试将其编码为 base64,因为这似乎是 Calendar.Events.patch 寻找的格式,但我认为我仍然遗漏了一些东西。
当我运行下面的代码时,报错returns"API call to calendar.events.get failed with error: Not Found."
function updateEvent(calendarId, eventId, email) {
var vSS = SpreadsheetApp.getActiveSpreadsheet();
var vS = vSS.getActiveSheet();
var eventId = vS.getRange("R2").getValue(); //R2 is the cell where my eventId is logged
//My attempt to encode my eventId to base64
var base64data = eventId;
var encoded = Utilities.base64Encode(base64data,Utilities.Charset.UTF_8);
var vEventName = vS.getRange("M3").getValue();
var newstartTime = vS.getRange("M5").getValue();
var newendTime = vS.getRange("M6").getValue();
var event = Calendar.Events.get('example@gmail.com', encoded);
if(event.attendees) {
event.attendees.push({
email: email
});
} else {
event.attendees = new Array({email: email});
}
event = Calendar.Events.patch(vEventName, encoded, {
start: newstartTime,
end: newendTime,
sendUpdates: "all"});
}
我怀疑编码的 eventId 有几个字符或其他东西,因为当我 运行 @google.com eventId 到 this encoding tool 时似乎就是这种情况。我只是不知道如何修复它。
请理解我是编写脚本的新手,而且我已经为这个问题苦苦挣扎了一个多星期。我想我在发布上一个问题后学到了很多东西,因为现在我对我的确切问题有了更好的了解,但我仍然不知道解决方法。我正在尝试通过阅读本网站上的问题、阅读 Google's information(不幸的是我基本上不理解)和观看 YouTube 视频来自学如何做到这一点。如果我对脚本的要求太多,请告诉我。
- 您想使用事件 ID 检索事件。
- 您想更新活动并向用户发送电子邮件。
- 您要修改活动名称、活动起止时间
eventId
是 1c0tqtn56c1tdo1i0fus66f53g@google.com
,这是一个文本值。
vEventName
是 Ethiopia Limu
,这是一个文本值。
newstartTime
是 6/10/2019
这是一个日期对象。
newendTime
是 7/30/2019
这是一个日期对象。
如果我的理解是正确的,这个修改怎么样?
修改点:
- 在您的脚本中,检索事件和更新事件的脚本似乎不同。所以在这个修改中,有分开。
- 当脚本为 运行.
时,您可以在日志中看到该事件
- 活动已更新。
- 关于事件ID,可以使用
1c0tqtn56c1tdo1i0fus66f53g@google.com
的1c0tqtn56c1tdo1i0fus66f53g
作为事件ID。
当这些反映到你的脚本中,就变成了下面这样。
修改后的脚本:
function updateEvent(calendarId, eventId, email) {
var vSS = SpreadsheetApp.getActiveSpreadsheet();
var vS = vSS.getActiveSheet();
var eventId = vS.getRange("R2").getValue();
var vEventName = vS.getRange("M3").getValue();
var newstartTime = vS.getRange("M5").getValue();
var newendTime = vS.getRange("M6").getValue();
var eid = eventId.split("@")[0]; // Added
// Retrieve event
var event = Calendar.Events.get(calendarId, eid);
if(event.attendees) {
event.attendees.push({
email: email
});
} else {
event.attendees = new Array({email: email});
}
Logger.log(event)
// Update event
var resource = {
start: {dateTime: newstartTime.toISOString()},
end: {dateTime: newendTime.toISOString()},
summary: vEventName,
};
Calendar.Events.patch(resource, calendarId, eid, {sendUpdates: "all"})
}
注:
- 如果更新事件时出现
date
和time
相关的错误,请确认newstartTime
和newendTime
是否分别为日期对象。
参考:
我正在尝试编写一个脚本来执行以下两项操作:1) 根据我的 sheet 中提供的日期更新我的 Google 日历上现有活动的日期和标题 AND 2 ) 通过电子邮件将更新的日期发送给活动的客人(这样他们日历上的活动就会更新)。
我能够使用 CalendarApp.getEventById(eventId) 成功更新我的活动的日期和标题。但是,我 真的 喜欢在活动日期更新后向每位客人重新发送活动通知。使用 CalendarApp 似乎不可能做到这一点(如果可能,请告诉我怎么做!)。在这个 question 中苦苦挣扎之后,我现在尝试使用 Calendar.Events.patch 来更新活动并将更新发送给所有活动的客人。
我一直遇到的问题是我的sheet通过我的createEvent脚本记录的eventId的格式以“@[=35结尾=]。” CalendarApp 可以很好地读取此格式,但无法被 Calendar.Events.patch 读取。我已经尝试将其编码为 base64,因为这似乎是 Calendar.Events.patch 寻找的格式,但我认为我仍然遗漏了一些东西。
当我运行下面的代码时,报错returns"API call to calendar.events.get failed with error: Not Found."
function updateEvent(calendarId, eventId, email) {
var vSS = SpreadsheetApp.getActiveSpreadsheet();
var vS = vSS.getActiveSheet();
var eventId = vS.getRange("R2").getValue(); //R2 is the cell where my eventId is logged
//My attempt to encode my eventId to base64
var base64data = eventId;
var encoded = Utilities.base64Encode(base64data,Utilities.Charset.UTF_8);
var vEventName = vS.getRange("M3").getValue();
var newstartTime = vS.getRange("M5").getValue();
var newendTime = vS.getRange("M6").getValue();
var event = Calendar.Events.get('example@gmail.com', encoded);
if(event.attendees) {
event.attendees.push({
email: email
});
} else {
event.attendees = new Array({email: email});
}
event = Calendar.Events.patch(vEventName, encoded, {
start: newstartTime,
end: newendTime,
sendUpdates: "all"});
}
我怀疑编码的 eventId 有几个字符或其他东西,因为当我 运行 @google.com eventId 到 this encoding tool 时似乎就是这种情况。我只是不知道如何修复它。
请理解我是编写脚本的新手,而且我已经为这个问题苦苦挣扎了一个多星期。我想我在发布上一个问题后学到了很多东西,因为现在我对我的确切问题有了更好的了解,但我仍然不知道解决方法。我正在尝试通过阅读本网站上的问题、阅读 Google's information(不幸的是我基本上不理解)和观看 YouTube 视频来自学如何做到这一点。如果我对脚本的要求太多,请告诉我。
- 您想使用事件 ID 检索事件。
- 您想更新活动并向用户发送电子邮件。
- 您要修改活动名称、活动起止时间
eventId
是1c0tqtn56c1tdo1i0fus66f53g@google.com
,这是一个文本值。vEventName
是Ethiopia Limu
,这是一个文本值。newstartTime
是6/10/2019
这是一个日期对象。newendTime
是7/30/2019
这是一个日期对象。
如果我的理解是正确的,这个修改怎么样?
修改点:
- 在您的脚本中,检索事件和更新事件的脚本似乎不同。所以在这个修改中,有分开。
- 当脚本为 运行. 时,您可以在日志中看到该事件
- 活动已更新。
- 关于事件ID,可以使用
1c0tqtn56c1tdo1i0fus66f53g@google.com
的1c0tqtn56c1tdo1i0fus66f53g
作为事件ID。
当这些反映到你的脚本中,就变成了下面这样。
修改后的脚本:
function updateEvent(calendarId, eventId, email) {
var vSS = SpreadsheetApp.getActiveSpreadsheet();
var vS = vSS.getActiveSheet();
var eventId = vS.getRange("R2").getValue();
var vEventName = vS.getRange("M3").getValue();
var newstartTime = vS.getRange("M5").getValue();
var newendTime = vS.getRange("M6").getValue();
var eid = eventId.split("@")[0]; // Added
// Retrieve event
var event = Calendar.Events.get(calendarId, eid);
if(event.attendees) {
event.attendees.push({
email: email
});
} else {
event.attendees = new Array({email: email});
}
Logger.log(event)
// Update event
var resource = {
start: {dateTime: newstartTime.toISOString()},
end: {dateTime: newendTime.toISOString()},
summary: vEventName,
};
Calendar.Events.patch(resource, calendarId, eid, {sendUpdates: "all"})
}
注:
- 如果更新事件时出现
date
和time
相关的错误,请确认newstartTime
和newendTime
是否分别为日期对象。