1

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

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

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

4

2 回答 2

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 文档可以在这里找到。

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

于 2013-11-05T11:39:59.020 回答
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 参考。

于 2013-11-06T00:04:12.530 回答