Google Apps 脚本:从 Google 日历中删除重复(事件系列)
Google AppsScript: Remove recurring (eventSeries) from Google Calendar
我有以下代码从我的 google 日历中删除在 google 工作表中标记为 Pending Removal
的事件。这段代码中删除单个事件的部分工作得很好,但我需要调整它以删除重复发生的事件。现在它只删除重复事件系列中的第一个事件。
注意:事件在 Column E
或 ```x[4]`` 中表示为待删除。
function calendarRemove() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var dataSheet = ss.getSheetByName('Events Calendar')
var settingsSheet = ss.getSheetByName('Calendar Settings');
var calendarId = 'calendarID';
var eventCal = CalendarApp.getCalendarById(calendarId);
var eventArray = dataSheet.getRange('A2:H').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[6];
var startTime = new Date(`${event[0]} ${event[2]} ${timeZone}`);
var endTime = new Date(`${event[0]} ${event[3]} ${timeZone}`);
var status = event[4]; // Used in the following comparison expression
if (status === 'Pending Removal') {
var returnedEvents = eventCal.getEventsForDay(eventDate, {search: eventName});
for (i = 0; i < returnedEvents.length; i++) {
var toRemove = returnedEvents[i];
if (toRemove.isRecurringEvent) {
toRemove.deleteEventSeries();
} else { toRemove.deleteEvent(); }
eventArray[x][4] = 'Removed'; // Modifying the status value from "Pending Removal" to "Removed"
}
}
}
dataSheet.getRange('A2:H').setValues(eventArray); // Overwrite the source data with the modified array
}
有一个讨论帖指出了这个问题,您需要先删除重复发生的事件,然后在
的循环中删除其余事件
这个脚本可能会帮助你,在上一个线程的末尾
function deleteEvents()
{
var calendarName = '<Name of the Calendar>';
var calendar = CalendarApp.getCalendarsByName(calendarName)[0];
var events = calendar.getEvents('<Sheet events where recurring events is set to "Yes">');
for(var i=0; i < events.length;i++)
{
var ev = events[i];
Logger.log('Checking Event Title === ' + calendar.getEventSeriesById(ev.getId()).getTitle());
calendar.getEventSeriesById(ev.getId()).deleteEventSeries();
Logger.log('Event Deleted');
}
}
我有以下代码从我的 google 日历中删除在 google 工作表中标记为 Pending Removal
的事件。这段代码中删除单个事件的部分工作得很好,但我需要调整它以删除重复发生的事件。现在它只删除重复事件系列中的第一个事件。
注意:事件在 Column E
或 ```x[4]`` 中表示为待删除。
function calendarRemove() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var dataSheet = ss.getSheetByName('Events Calendar')
var settingsSheet = ss.getSheetByName('Calendar Settings');
var calendarId = 'calendarID';
var eventCal = CalendarApp.getCalendarById(calendarId);
var eventArray = dataSheet.getRange('A2:H').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[6];
var startTime = new Date(`${event[0]} ${event[2]} ${timeZone}`);
var endTime = new Date(`${event[0]} ${event[3]} ${timeZone}`);
var status = event[4]; // Used in the following comparison expression
if (status === 'Pending Removal') {
var returnedEvents = eventCal.getEventsForDay(eventDate, {search: eventName});
for (i = 0; i < returnedEvents.length; i++) {
var toRemove = returnedEvents[i];
if (toRemove.isRecurringEvent) {
toRemove.deleteEventSeries();
} else { toRemove.deleteEvent(); }
eventArray[x][4] = 'Removed'; // Modifying the status value from "Pending Removal" to "Removed"
}
}
}
dataSheet.getRange('A2:H').setValues(eventArray); // Overwrite the source data with the modified array
}
有一个讨论帖指出了这个问题,您需要先删除重复发生的事件,然后在
这个脚本可能会帮助你,在上一个线程的末尾
function deleteEvents()
{
var calendarName = '<Name of the Calendar>';
var calendar = CalendarApp.getCalendarsByName(calendarName)[0];
var events = calendar.getEvents('<Sheet events where recurring events is set to "Yes">');
for(var i=0; i < events.length;i++)
{
var ev = events[i];
Logger.log('Checking Event Title === ' + calendar.getEventSeriesById(ev.getId()).getTitle());
calendar.getEventSeriesById(ev.getId()).deleteEventSeries();
Logger.log('Event Deleted');
}
}