Google apps script 谷歌脚本-创建多个日历事件

Google apps script 谷歌脚本-创建多个日历事件,google-apps-script,google-sheets,google-calendar-api,Google Apps Script,Google Sheets,Google Calendar Api,我有一个带有事件列表的电子表格,但需要将它们插入各自的日历中。到目前为止,我有: function pushCalendars() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheets = ss.getSheets(); for (i in sheets){ if (sheets.length > 1){ var lastRow = sheets[i].getLastRow(); va

我有一个带有事件列表的电子表格,但需要将它们插入各自的日历中。到目前为止,我有:

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);
    }
  }
}

如果您有任何解决方案,请告诉我

如果日历归您的用户所有,您将不会遇到任何问题。 您需要在代码中更改的唯一一件事是创建此代码段中仍然不存在的日历:

// 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文档


如果日历属于其他用户,您需要具有管理权限才能修改它,并且您需要使用OAuth plus登录,使用URLFetch调用日历API(可以找到日历API)。

我总是按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);

有关ScriptProperties的参考。

谢谢!不幸的是,我已经创建了日历,所以我需要按我遇到问题的地方的名称获取它们。您面临什么问题?我希望能够创建新的工作表并在这些工作表上运行该功能,而不必返回代码并将日历或工作表添加到代码中。我不知道怎么做,所以这个?函数pushCalendars(){var ss=SpreadsheetApp.getActiveSpreadsheet();var sheet=ss.getSheets();for(i in sheet){if(sheet.length>1){var lastRow=sheet[i].getLastRow();var range=sheet[i]。getRange(3,1,lastRow,100);var data=range.getValues();for(i in data){var row=data[i];var title=row[0];var date=row[2];var desc=row[3];var calName=sheet[i].getRange('E3').getValue();var calId=ScriptProperties.getProperty(calName);var calal=CalendarApp.getCalendarById(calId);var newEvent=cal[i].createAllDayEvent(title,date);}}}}}}所以我尝试了一下,返回了“类型错误:无法调用null的方法”createAllDayEvent您是否使用与日历名称匹配的日历ID创建了脚本属性?是的,我不太清楚为什么这个脚本如此困难。当我只在一张工作表中工作时,CalName加法就起作用了,但当我尝试在多张工作表中运行CalName加法时,CalName加法就起作用了。找到了。由于注释中塞满了所有代码,我在阅读时遇到了一些困难。newEvent=cal[i].createAllDayEvent(标题、日期);但是cal不是数组,所以cal[i]返回null。