#google-apps-script #google-calendar-api
#google-apps-script #google-calendar-api
Вопрос:
Я использую следующий код, чтобы проверить, есть ли отмененные события в календаре Google. Он отлично работает для регулярных, неповторяющихся событий. Однако я сталкиваюсь с проблемой, когда пользователь удалил одно событие в повторяющейся серии событий.
function checkForCancelledEvents(){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Data Source");
ss.setActiveSheet(sheet);
//sort by date added
var lastRow = sheet.getLastRow();
var range = sheet.getRange(1,2,lastRow, 5)
var values = range.getValues();
//in the array the 3 position is the eventId, the 4 position is the calendar ID, I'm putting more into the array since I was playing around with also using the start date or time to solve the problem
//loop through all using Calendar.Events.get
for (i=1;i<values.length;i ) {
var splitEventID = values[i][3].toString().split("@")[0] //remove the calendarID from the eventID
if (Calendar.Events.get(values[i][4],splitEventID).status === "cancelled") {
//the below clears the content of the row that contains the cancelled events
//the range has to start at i 1 since the values include the header row, but the for loop starts at 1 instead of 0 to prevent the API from calling with data from header row (which produces an error). So i 1 gives the accurate row number for which the cancelled event lives
var clearRange = sheet.getRange(i 1,1,1,7)
clearRange.clearContent()
} else {
//Logger.log("this is NOT cancelled")
}
}
}
Проблема в том, что все повторяющиеся события содержат одинаковые EventID и calendarId. У них также одинаковый идентификатор ICalUid. Повторяющиеся события имеют другой id
, но неповторяющиеся события не имеют одинакового id
формата. Я попытался использовать Calendar.event.перечислите и добавьте timeMin
каждое событие в повторяющейся серии, однако событие все еще было указано как confirmed
, хотя оно было удалено.
Есть ли способ узнать, было ли удалено одно событие в повторяющейся серии?
Ответ №1:
Я полагаю, что ваша цель заключается в следующем.
- Из
Is there a way to find if a single event within a recurring series has been deleted?
, вы хотите знать, удалено ли хотя бы одно из событий из повторяющихся событий с помощью Google Apps Script.
В этом случае я подумал, что при использовании метода «События: экземпляры» ваша цель может быть достигнута. Пример сценария выглядит следующим образом.
Пример сценария:
Перед использованием этого скрипта, пожалуйста, включите API календаря в расширенных службах Google.
var calendarId = "###"; // Please set the calendar ID.
var eventId = "###"; // Please set the event ID.
var ar = [];
var pageToken = "";
do {
var res = Calendar.Events.instances(calendarId, eventId, {maxResults: 2500, showDeleted: true, pageToken});
if (res.items.length > 0) ar = [...ar, ...res.items.filter(({status}) => status == "cancelled")];
pageToken = res.nextPageToken;
} while (pageToken);
if (ar.length > 0) {
// When "ar" has the values, the events are deleted from the recurring events.
// do something.
}
- В приведенном выше сценарии вы можете просмотреть информацию об удаленных событиях по адресу
ar
.
Примечание:
- Это простой пример сценария. Поэтому, пожалуйста, измените это для вашей реальной ситуации.
Ссылка:
Комментарии:
1. Спасибо! Похоже, это работает хорошо. Можете ли вы сказать мне, что делают три точки в этой строке
ar = [...ar,
? Я пытался получить доступ к дате и времени отмененного события. Любая помощь по этому поводу?2. Не обращайте внимания на вопрос в моем комментарии. Я понял это с помощью
Logger.log(ar[0]["start"]["dateTime"])
3. @Craig. Пирс Спасибо за ответ. Я рад, что ваша проблема была решена. И вам спасибо.