【发布时间】:2022-01-12 00:22:01
【问题描述】:
我有以下代码可将我的活动从 Google 表格上传到 Google 日历。此代码根据 E 列(状态)x[4] 中的值搜索需要同步到日历的行。标记为Pending Schedule 或Pending Removal 的事件将同步到日历,然后使用Scheduled 或Removed 更新工作表中的相应行。
这段代码在调度事件方面运行良好。但是,当涉及到删除事件时,它仅在数据的第一行被标记为要删除时才有效,而在其他行上则无效。它给了我TypeError: Cannot read property 'deleteEvent' of undefined,当我调查deleteEvent 对象时显示为CalendarEvent。
似乎我编写if() 函数的方式不合适,else if() 不会评估整个数据。我尝试用另一个if() 替换else if(),但收到了同样的错误。
function calendarSync2() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var dataSheet = ss.getSheetByName('Test Sheet')
var settingsSheet = ss.getSheetByName('Calendar Settings');
var calendarId = settingsSheet.getRange('B2').getValues();
var eventCal = CalendarApp.getCalendarById(calendarId);
var eventArray = dataSheet.getRange('A2:I').getDisplayValues();
for (x = 0; x < eventArray.length; x++) {
var event = eventArray[x];
var eventName = event[1];
var eventDate = new Date(event[0]);
var timeZone = event[5];
var startTime = new Date(`${event[0]} ${event[2]} ${timeZone}`); ///Used Object literals of `` combined with ${}
var endTime = new Date(`${event[0]} ${event[3]} ${timeZone}`);
var status = event[4]; // Used in the following comparison expression instead of filter
if (status === 'Pending Schedule') { /// === undertakes strict comparison
var exisEvents = eventCal.getEvents(startTime, endTime, {search: eventName}); // prevents creation of duplicates
if (exisEvents.length == 0) {
Logger.log(`timed ${eventName} scheduled for: ${startTime} till ${endTime}`);
eventCal.createEvent(eventName, startTime, endTime);
eventArray[x][4] = "Scheduled"; // Updates the status
}
} else if (status === 'Pending Removal') {
Logger.log(`${eventName} at ${eventDate} REMOVED`)
var returnedEvent = eventCal.getEvents(startTime, endTime, {search: eventName});
var toRemove = returnedEvent[x];
Logger.log(`returnedEvent is: ${returnedEvent}`);
toRemove.deleteEvent();
eventArray[x][4] = "Removed";
}
}
dataSheet.getRange('A2:I').setValues(eventArray); // Overwrite the source data with the modified array
}
【问题讨论】:
-
我必须为我糟糕的英语水平道歉。不幸的是,我无法理解
But when it comes to removing events it only works if the first row of the data is marked to be removed, but not on other rows.。可以问一下具体情况吗? -
您的日志是否都符合预期?你能检查
startTime和endTime的值吗? -
@Ihopethisishelpfultoyou 我检查了 startTime 和 endTime 的日志,它们工作得很好。
标签: javascript google-apps-script google-sheets google-calendar-api