Google Apps 脚本:使用 CalendarID 的变量输入批量创建日历事件
Google Apps Script: Batch Create Calendar Events with Variable Inputs for CalendarID
我正在尝试制作一个任务调度程序,它可以读取 Google Sheet 充满任务(任务名称、开始时间、结束时间、分配给的人)和在指定人员的日历上自动创建日历事件。
...基本上有我需要的一切,只是它只需要一个 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
未声明。从你的脚本和你展示的示例图片,我认为 calendarId
是 var 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);
}
}
}
我正在尝试制作一个任务调度程序,它可以读取 Google Sheet 充满任务(任务名称、开始时间、结束时间、分配给的人)和在指定人员的日历上自动创建日历事件。
...基本上有我需要的一切,只是它只需要一个 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
修改点:
calendarId
未声明。从你的脚本和你展示的示例图片,我认为calendarId
是var calendarID = shift[3];
.volunteer
未声明。从您显示的示例图像中,我认为var task = shift[0]
可能是volunteer
.
var eventCal = CalendarApp.getCalendarById(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(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);
}
}
}