我正在尝试编写一个能够同时执行以下操作的脚本:1)根据工作表中提供的日期更新我Google日历上现有活动的日期和标题,以及2)通过电子邮件将更新的日期发送给活动的日期客人(因此日历上的活动会更新)。
我能够使用CalendarApp.getEventById(eventId)成功更新事件的日期和标题。但是,我真的希望事件通知在事件的日期更新后重新发送给每个来宾。使用CalendarApp似乎无法做到这一点(如果可能,请告诉我如何做!)。在此question中对此进行了努力之后,我现在正尝试使用Calendar.Events.patch更新事件并将更新发送给所有事件的来宾。
我一直遇到的问题 是,我的createEvent脚本在工作表中记录的eventId的格式以“ @ google.com”结尾。 CalendarApp可以很好地读取此格式,而Calendar.Events.patch无法读取此格式。我已经尝试将其编码为base64,因为这似乎是Calendar.Events.patch所寻找的格式,但是我认为我仍然缺少一些东西。
当我运行下面的代码时,错误返回“ API调用calendar.events.get失败,并显示错误:未找到。”
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偏离了几个字符或某些字符,因为当我通过this encoding tool运行@ google.com eventId时似乎是这种情况。我只是不知道要解决它。
请理解,我对编写脚本非常陌生,并且已经为这个问题苦苦挣扎了一个多星期。我想我在发布最后一个问题后学到了很多东西,因为现在我对我的确切问题有了更好的了解,但是我仍然不知道解决方法。我正在尝试通过阅读本网站上的问题,阅读Google's information(不幸的是,我基本上不理解)以及观看YouTube视频来教自己如何做到这一点。如果我要的脚本太多,请告诉我。
答案 0 :(得分:0)
eventId
是1c0tqtn56c1tdo1i0fus66f53g@google.com
,它是一个文本值。vEventName
是Ethiopia Limu
,它是一个文本值。newstartTime
是6/10/2019
,它是一个日期对象。newendTime
是7/30/2019
,它是一个日期对象。如果我的理解是正确的,那么该修改如何?
1c0tqtn56c1tdo1i0fus66f53g
中的1c0tqtn56c1tdo1i0fus66f53g@google.com
作为事件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
分别是日期对象。