Нужна помощь в определении кода для удаления элемента календаря, созданного на основе данных листов - PullRequest
1 голос
/ 05 июля 2019

Я написал систему управления контентом, используя 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;
    }
  }}

Может кто-нибудь помочь мне выяснить, что мне не хватает, поэтому элемент удален?Я уверен, что это что-то простое, я просто не вижу.Спасибо!

1 Ответ

0 голосов
/ 05 июля 2019
function deleteEvents() {
  var sheet=SpreadsheetApp.getActiveSheet();
  var headerRows=1;
  var range=sheet.getRange(headerRows + 1,1,sheet.getLastRow(),sheet.getLastColumn());
  var data=range.getValues();
  var cal=CalendarApp.getCalendarById("Calendar ID");
  for (i=0;i<data.length;i++) {
    if(data[i][7]) {
       cal.getEventById(data[i][7]).deleteEvent(); 
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...