从电子表格创建Google日历事件“无法调用方法“ setTitle为null”。

时间:2018-08-16 20:16:45

标签: javascript google-sheets-api

我正在处理一个脚本,该脚本从google电子表格中的工作表生成日历事件。调试代码后,我没有出现任何错误,但是当我运行代码时,得到的是“无法调用null的方法'setTitle'”。我尝试进行故障排除失败,并且不完全了解此错误的实质。有人可以帮我了解我在做什么错吗?

function onOpen() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var entries = [{
    name : "Export Events",
    functionName : "exportEvents"
  }];
  ss.addMenu("Calendar Actions", entries);
};

/**
 * Export events from spreadsheet to calendar
 */
function exportEvents() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet2");
  var headerRows = 389;  // Number of rows of header info (to skip)
  var range = sheet.getDataRange();
  var data = range.getValues();
  var calId = "somewhere@farfaraway.com";
  var cal = CalendarApp.getCalendarById(calId);
  for (i=0; i<data.length; i++) {
    if (i < headerRows) continue; // Skip header row(s)
    var row = data[i];
    var date = new Date(row[11]);  // column L
    var title = row[9];        // Column J
    var estimator = row[6];
    var tstart = new Date(row[11]);
    tstart.setDate(date.getDate());
    tstart.setMonth(date.getMonth());
    tstart.setYear(date.getYear());
    var tstop = new Date(row[11]);
    tstop.setDate(date.getDate());
    tstop.setMonth(date.getMonth());
    tstop.setYear(date.getYear());
    var loc = row[10];             // Column K
    var desc = row[13];            // Column N
    var id = row[0];              // Column A == eventId
    // Check if event already exists, update it if it does
    try {
      var calev = cal.getEventSeriesById(id);
    }
    catch (e) {
      // do nothing - we just want to avoid the exception when event doesn't exist
    }
    if (estimator == "a person" && !calev) {
      //cal.createEvent(title, new Date("March 3, 2010 08:00:00"), new Date("March 3, 2010 09:00:00"), {description:desc,location:loc});
      var newEvent = cal.createEvent(title, tstart, tstop, {description:desc,location:loc}).getId();
      row[0] = newEvent;  // Update the data array with event ID
    }
       
    else {
      calev.setTitle(title);
      calev.setDescription(desc);
      calev.setLocation(loc);
      // event.setTime(tstart, tstop); // cannot setTime on eventSeries.
      // ... but we CAN set recurrence!
      var recurrence = CalendarApp.newRecurrence().addDailyRule().times(1);
      event.setRecurrence(recurrence, tstart, tstop);
    }
    debugger;
  }
  // Record all event IDs to spreadsheet
  range.setValues(data);
}

0 个答案:

没有答案