我有一个包含事件列表的电子表格,但需要将它们插入到各自的日历中。到目前为止,我有这个:
function pushCalendars() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheets = ss.getSheets();
for (i in sheets){
if (sheets.length > 1){
var lastRow = sheets[i].getLastRow();
var range = sheets[i].getRange(3,1,lastRow,100);
var data = range.getValues();
for (i in data){
var row = data[i];
var title = row[0];
var title2 = row[1];
var date = row[2];
var desc = row[3];
var calName = ss.getSheetByName("Resorts").getRange('E3').getValue();
var cal = CalendarApp.openByName(calName);
cal.createAllDayEvent(title,date);
}
}
}
如果您有任何解决方案,请告诉我们。
答案 0 :(得分:0)
如果日历归您的用户所有,您将面临任何问题。 您需要在代码中更改的唯一方法是创建这段代码仍然不存在的日历:
// Creates a new calendar named "Travel Plans" with a summary and color.
var calendar = CalendarApp.createCalendar('Travel Plans', {
summary: 'A calendar to plan my travel schedule.',
color: CalendarApp.Color.BLUE
});
Logger.log('Created the calendar "%s", with the ID "%s".',
calendar.getName(), calendar.getId());
可以找到API文档here。
如果日历属于其他用户,则需要具有管理权限才能对其进行修改,您需要使用OAuth登录并使用URLFetch调用日历API(可以找到日历API here。)
答案 1 :(得分:0)
我总是通过id获取我的日历,因为日历已经存在,您可以从日历设置中获取日历ID,并将它们作为项目属性插入到脚本中。然后,您需要做的就是加载与名称匹配的ID。
更改这两行:
var calName = ss.getSheetByName("Resorts").getRange('E3').getValue();
var cal = CalendarApp.openByName(calName);
对此:
var calName = ss.getSheetByName("Resorts").getRange('E3').getValue();
var calID = ScriptProperties.getProperty(calName);
var cal = CalendarApp.getCalendarByID(calID);
https://developers.google.com/apps-script/guides/properties#scriptProperties以获取有关ScriptProperties的参考。