您好,我正在尝试修改将Google日历与Google表格同步的脚本。 从日历到工作表以及从工作表到日历。
当前,日历ID是在Google代码的这一行上手动输入的:
var calendarId = '(calendarid@group.calendar.google.com';
这来自Dave Par https://github.com/Davepar/gcalendarsync
的脚本我已经修改了显示的菜单,如下所示:
var ui = SpreadsheetApp.getUi();
var subMenu = SpreadsheetApp.getUi().createMenu('Update to Calendar')
.addItem('Update to Calendar', 'syncToCalendar')
var topMenu = SpreadsheetApp.getUi().createMenu('Calendar Sync')
.addItem('Update from Calendar', 'syncFromCalendar')
.addSubMenu(subMenu);
topMenu.addToUi();
}
我想做的是使用以下功能在菜单中获取SyncToCalendar和SyncFromCalendar两个功能中的每一个,以使子菜单作为我的所有日历的下拉列表填充
https://developers.google.com/calendar/v3/reference/calendarList/list#examples
var calendars, pageToken;
do {
calendars = Calendar.CalendarList.list({
maxResults: 100,
pageToken: pageToken
});
if (calendars.items && calendars.items.length > 0) {
for (var i = 0; i < calendars.items.length; i++) {
var calendar = calendars.items[i];
Logger.log('%s (ID: %s)', calendar.summary, calendar.id);
}
} else {
Logger.log('No calendars found.');
}
pageToken = calendars.nextPageToken;
} while (pageToken);
}
因此基本上可以选择一个特定的日历来运行SyncTocalendar函数和SyncFromCalendar函数。
任何帮助实现这一目标的方法将不胜感激。
我已经看到一个主题,该主题是在仅更改ID的单元格上完成的,所以希望可以修改此cript以使子菜单中的日历名称下拉?
答案 0 :(得分:0)
您最好的选择是更改syncToCalendar
和syncFromCalendar
以输入参数。但这是不可能的,因为通过菜单执行的功能不带参数。您会看到非常相似的问题here。
如果日历的数量是固定的,并且很少,那么您可以尝试仅包装两个函数并像在this question中一样在菜单中调用一个或另一个。
但是,如果您受困于大量无法静态包装的日历,则应尝试使用Function
构造函数动态地进行处理。这将为您提供一种在运行代码时创建函数的方法,请看一下this question to create functions。
您还可以尝试其他方法,例如,您可以创建一个cell with a dropdown来获取所有日历ID。然后从该单元格获取日历ID。