我正在尝试创建一个 Google 表格,以便可以安排车间服务日历。
我已按照以下教程操作,但遇到了一些错误,希望有人能够轻松识别错误。
https://www.youtube.com/watch?v=fAfomDR0pe4&list=PL3ooKofg5LEr7yYPz7DyReKrAhhBecfUv
出现这个错误,我尝试查找原因,但一头雾水。我已将开始时间和结束时间格式化为“日期时间”,并尝试删除所有单元格,只保留我输入的内容。我想可能是我输入的范围有误?我不确定……
异常:参数(String、String、null、(class))与 CalendarApp.Calendar.createEvent 的方法签名不匹配。
脚本代码如下:
let calendarId = '[email protected]'; // add your calendar id here
// if your events are coming through but the time is off, click on the gear icon to the left and make sure the time zone matches the time zone setting on your Google Calendar
// on open script menu
function onOpen() {
let ui = SpreadsheetApp.getUi();
ui.createMenu("Chur Bro").addItem("Update Calendar", "updateCalendar").addToUi();
}
// main function will irterate through data and determine if we are adding, updating or deleting an event.
function updateCalendar() {
let ss = SpreadsheetApp.getActiveSpreadsheet();
let sheet = ss.getSheetByName("Service Register");
let events = sheet.getRange(9,13,sheet.getLastRow()-1,24).getValues();
for (i = 0; i < events.length; i++) {
let event = events[i];
let returnedData;
if (event[0] != '') {
switch (event[0]) {
case 'Add':
returnedData = addEvent(event)
break;
case 'Update':
returnedData = updateEvent(event);
break;
case 'Delete':
returnedData = deleteEvent(event);
break;
}
sheet.getRange(i + 9, 21, 9, ).setValues([returnedData]);
}
}
sheet.getRange(9, 13, sheet.getLastRow()-1, 13).clearContent();
}
function addEvent(event) {
let title = event[17];
let description = event[18];
let location = event[19];
let emails = event[20];
let startTime = event[23]
let endTime = event[24]
let options = {};
if (description != '') { options['description'] = description; }
if (location != '') { options['location'] = location; }
if (emails != '') { options['guests'] = emails; }
let calendar = CalendarApp.getCalendarById(calendarId);
let id = calendar.createEvent(title, startTime, endTime, options).getId();
return ["Added", id];
}
function updateEvent(event) {
let title = event[17];
let description = event[18];
let location = event[19];
let emails = event[20];
let eventId = event[22];
let startTime = event[23];
let endTime = event[24];
let calendar = CalendarApp.getCalendarById(calendarId);
let thisEvent = calendar.getEventById(eventId);
thisEvent.setTime(startTime, endTime)
.setTitle(title)
.setDescription(description)
.setLocation(location);
if (emails != '') {
emails = emails.split(",");
emails.forEach(x => thisEvent.addGuest(x));
}
return ["Modified", eventId];
}
function deleteEvent(event) {
let eventId = event[22];
let calendar = CalendarApp.getCalendarById(calendarId);
let thisEvent = calendar.getEventById(eventId);
thisEvent.deleteEvent();
return ['Deleted', ''];
}
Google Sheet 的图片:
根据您提供的数据集图像,您似乎遇到了此错误,因为它应该获取值的范围不正确,这导致您当前的脚本无法充分满足方法createEvent所需的参数。
请仔细阅读并研究getRange(row, column, numRows, numColumns)的官方文档,因为您的所有问题都与此方法有关。理解此方法后,它将极大地帮助您理解电子表格的范围及其索引。
为了获取不带标题的数据集的所有值,您可以使用以下 R1C1 范围:
我已尝试复制您当前的脚本和数据集,以修复范围内的问题。这是我的工作脚本,您可以参考并指出您的大部分问题。如果存在错误或需要更正的地方,请随意试用并调整范围。
M8:X11
这是我在一定范围内用来集成我的脚本的 Google Sheet 示例数据集。如果您打算了解和研究电子表格的范围和索引,您可以随时使用这些调试方法:
.getValues()
如果您在电子表格中拥有值,并且在调试方法中使用该方法,那么您也可以更轻松地指出。例子: