Google脚本 - 为多个日历创建事件

时间:2013-11-04 19:52:44

标签: 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();
    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);
    }
  }
}

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

2 个答案:

答案 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的参考。