多个Google日历到Google Sheet双向同步问题

时间:2019-12-17 01:37:57

标签: google-calendar-api google-sheets-api submenu

您好,我正在尝试修改将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以使子菜单中的日历名称下拉?

https://www.oipapio.com/question-5536049

1 个答案:

答案 0 :(得分:0)

您最好的选择是更改syncToCalendarsyncFromCalendar以输入参数。但这是不可能的,因为通过菜单执行的功能不带参数。您会看到非常相似的问题here

如果日历的数量是固定的,并且很少,那么您可以尝试仅包装两个函数并像在this question中一样在菜单中调用一个或另一个。

但是,如果您受困于大量无法静态包装的日历,则应尝试使用Function构造函数动态地进行处理。这将为您提供一种在运行代码时创建函数的方法,请看一下this question to create functions

您还可以尝试其他方法,例如,您可以创建一个cell with a dropdown来获取所有日历ID。然后从该单元格获取日历ID。