我现在有一个工作表绑定脚本,该脚本读取电子表格数据并基于工作表创建日历事件。该电子表格还存储其他用户的日历ID(我不拥有),而我正尝试为其读取/写入其Google日历。
我的理想用法是,一个用户可以为所有存储的用户触发脚本,或者每个用户都可以单击该脚本并将其事件添加到指定的日历中,但是我发现我什至无法仅凭其他权限访问其他人的日历他们的calendarID。
我在其他Google帐户上创建测试日历后,我的代码崩溃了。我将日历切换为公共日历,现在至少变得空了,如getEvents()文档所指示。然后,我订阅了该日历,并收到了“例外:不允许采取行动”。
我遇到了OAuth2,觉得这是我需要以某种方式实现的东西,但是我不确定该如何处理。 我是否可以通过脚本对多个用户的日历进行更改,或者我需要了解Web应用程序,是否可以通过某种方式访问其他人的日历?
编辑:我不是域用户,仅使用私人Google个人帐户
Edit 2:还发现附件是一回事。要阅读有关的内容
/**
Function to add shift details to user's calendar
@param{object} user-object with keys of column header's of user-info sheet
(name, email, year, calName, calID, early, late)
@param{object} eventDetails - an object with keys created after interpreting shift codes
(title, start, end, location, desscription, problem, pdate, pvalue)
*/
function addToCalendar(user, eventDetails){
var calendar = CalendarApp.getCalendarById(user.calID);
if(calendar == null){
Logger.log(user.name); //testing code, realized I couldn't accesss other's calIDs here
}
var existingEvents = calendar.getEvents(eventDetails.start, eventDetails.end);
if(existingEvents.length>0){
if(existingEvents[0].getTitle() == eventDetails.title){
Logger.log("ALREADY CREATED!!");
return;
}
}
calendar.createEvent(eventDetails.title, eventDetails.start, eventDetails.end,
{description : (eventDetails.description ? eventDetails.description:""),
location: (eventDetails.location ? eventDetails.location:"")});
}
也许避免将OAuth流编码到您的应用程序中的一种好方法是将脚本作为Web app部署,并通过选择“将应用程序执行为:用户访问Web应用程序”]进行部署。] > [当用户从您的Web应用程序发出请求时,将弹出Web应用程序的同意屏幕,并且用户必须征得同意,此后,此脚本将以用户身份运行,并可以使用CalendarApp将事件添加到他们的日历中。