Google Apps 脚本:使用 CalendarID 的变量输入批量创建日历事件

Google Apps Script: Batch Create Calendar Events with Variable Inputs for CalendarID

我正在尝试制作一个任务调度程序,它可以读取 Google Sheet 充满任务(任务名称、开始时间、结束时间、分配给的人)和在指定人员的日历上自动创建日历事件。

本教程:https://cloud.google.com/blog/products/g-suite/g-suite-pro-tip-how-to-automatically-add-a-schedule-from-google-sheets-into-calendar

...基本上有我需要的一切,只是它只需要一个 CalendarID,而我认为我需要 CalendarID 作为循环的一部分。

本例中的 CalendarID 都是电子邮件地址。

这是我尝试过的:

function scheduleTasks() {
var spreadsheet = SpreadsheetApp.getActiveSheet();
var signups = spreadsheet.getRange("E9:H13").getValues();
for (x=0; x<signups.length;x++)
{
    var shift = signups[x];
    var calendarID = shift[3];
    var eventCal = CalendarApp.getCalendarById(calendarId);
    var task= shift[0];
    var startTime = shift[1];
    var endTime = shift[2];
    eventCal.createEvent(volunteer, startTime, endTime);
}
}

function onOpen() {
  var ui = SpreadsheetApp.getUi();
  ui.createMenu('Sync to Calendar')
  .addItem('Schedule tasks now', 'scheduleTasks')
  .addToUi();
}

这是我遇到的错误:

8:38:40 AM Error TypeError: Cannot read property 'createEvent' of null scheduleTasks @ Code.gs:12

之前从未使用过 JS/Google Apps 脚本,因此非常感谢任何建议, 谢谢

my input data

修改点:

    var eventCal = CalendarApp.getCalendarById(calendarId);
  • calendarId 未声明。从你的脚本和你展示的示例图片,我认为 calendarIdvar calendarID = shift[3];.
  • volunteer 未声明。从您显示的示例图像中,我认为 var task = shift[0] 可能是 volunteer.

当这些点体现在你的脚本中,就变成了下面这样。

修改后的脚本:

function scheduleTasks() {
  var spreadsheet = SpreadsheetApp.getActiveSheet();
  var signups = spreadsheet.getRange("E9:H13").getValues();
  for (x = 0; x < signups.length; x++) {
    var shift = signups[x];
    var calendarID = shift[3];
    var eventCal = CalendarApp.getCalendarById(calendarID);
    var task = shift[0];
    var startTime = shift[1];
    var endTime = shift[2];
    eventCal.createEvent(task, startTime, endTime);
  }
}

注:

  • 修改后的脚本中,当日历ID不存在且您没有日历ID的日历写入权限且startTime, endTime的值不是日期对象时,会报错。请注意这一点。

刚刚试了一下,这似乎有效:

function scheduleTasks() {
var spreadsheet = SpreadsheetApp.getActiveSheet();
var signups = spreadsheet.getRange("E9:H13").getValues();
for (x=0; x<signups.length;x++)
{
    var shift = signups[x];
    var calendarID = shift[3];
    if(calendarID){
      var eventCal = CalendarApp.getCalendarById(calendarID);
      var task= shift[0];
      var startTime = shift[1];
      var endTime = shift[2];
      eventCal.createEvent(task, startTime, endTime);
    }

}
}