Я написал систему управления контентом, используя Google Sheets, которая записывает назначения в Календарь Google.Триггер настроен на запуск вручную, потому что любой из триггеров Google заново заполняет элементы календаря каждый раз, когда что-то изменяется в диапазоне (я не мог найти способ обойти это).Итак, каждому предмету присваивается уникальный идентификатор.Это хорошо работает, и хотя вам придется снова запускать скрипт, если что-то меняется, меню встроено в пользовательский интерфейс.Так что это неплохо.Вы увидите, что я также создал пункт меню пользовательского интерфейса для удаления события.Я также хочу запустить это вручную.В этой CMS есть два листа: один - это текущие проекты, где он и заполняется.Другой называется «Завершенные проекты».Он содержит все те же данные, но когда проект завершен, у меня есть второй сценарий, который перемещает его на лист «Завершенные проекты», когда они сделаны (это основано на строке, и я считаю, что цель установлена на onEdit, но этоработает).В идеале я хотел бы, чтобы элемент календаря был удален либо путем запуска сценария с помощью меню пользовательского интерфейса (ручной запуск, и, честно говоря, то, что я бы предпочел), либо при его перемещении на лист «Завершенные проекты».И вот тут я сталкиваюсь с проблемами.
Я не могу заставить логику работать, чтобы найти идентификатор.Я думал, что способ сделать это состоит в том, чтобы он посмотрел на уникальный идентификатор в завершенной папке (он перемещается вместе с ним после завершения элемента), а затем вручную запустил удаление из меню пользовательского интерфейса.Если он находит этот идентификатор, он должен удалить элемент календаря.Этот сценарий появляется в строке 7 (столбец H) на обоих листах.Я пытался заставить его найти данные на этом листе и в этой строке, а затем с помощью класса deleteEvent вызвать это значение и заставить его удалить событие при запуске сценария.Скрипт не генерирует ошибку, но также не удаляет элемент календаря.Вот код:
function onOpen(e) {
SpreadsheetApp.getUi()
.createMenu('Calendar Actions')
.addItem('Export Assignments', 'exportEvents')
.addSeparator()
.addItem('Delete Assignments', 'deleteEvents')
.addToUi();
};
function exportEvents() {
var sheet = SpreadsheetApp.getActiveSheet();
var headerRows = 1;
var range = sheet.getDataRange();
var data = range.getValues();
var calId = "Calendar ID";
var cal = CalendarApp.getCalendarById(calId);
for (i=0; i<data.length; i++) {
if (i < headerRows) continue;
var row = data[i];
var date = new Date(row[4]);
var title = row[0];
var tstart = new Date(row[4]);
var assignee = row [2]
var tstop = new Date(row[5]);
var id = row[7];
try {
var event = cal.getEventSeriesById(id);
}
catch (e) {
}
if (!event) {
var newEvent = cal.createAllDayEvent(title, tstart, tstop, {description:assignee}).getId();
row[7] = newEvent;
}
else {
event.setTitle(title);
event.setDescription(assignee);
var recurrence = CalendarApp.newRecurrence().addDailyRule().times(1);
event.setRecurrence(recurrence, tstart, tstop);
}
debugger;
}
range.setValues(data);
}
function deleteEvents() {
var sheet = SpreadsheetApp.getActiveSheet();
var headerRows = 1;
var range = sheet.getDataRange();
var data = range.getValues();
var calId = "Calendar ID";
var cal = CalendarApp.getCalendarById(calId);
for (i=0; i<data.length; i++) {
if (i < headerRows) continue;
var row = data[i];
var date = new Date(row[4]);
var title = row[0];
var tstart = new Date(row[4]);
var assignee = row [2]
var tstop = new Date(row[5]);
var id = row[7];
try {
var event = cal.getEventSeriesById(id);
}
catch (e) {
}
if (!event) {
var oldEvent = cal.deleteEvent(title, tstart, tstop, {description:assignee}).getId();
row[7] = oldEvent;
}
}}
Может кто-нибудь помочь мне выяснить, что мне не хватает, поэтому элемент удален?Я уверен, что это что-то простое, я просто не вижу.Спасибо!