Создать повторяющееся событие календаря на весь день из списка дат в Google Sheet - PullRequest
1 голос
/ 01 ноября 2019

У меня есть список дат в столбце A (начиная с A2) в сочетании с текстом заголовка в столбце B (начиная с B2). У меня есть идентификатор календаря, указанный в ячейке E2.

Я хотел бы отправить эти данные в Календарь Google для создания повторяющихся событий календаря на весь день. Этот календарь должен обновляться при изменении электронной таблицы.

Ответы [ 2 ]

1 голос
/ 01 ноября 2019

Вот что я нашел для вас. это основано на моем понимании, может быть я ошибаюсь. Просто хочу вам помочь.

https://www.quora.com/How-do-I-automatically-add-events-to-a-Google-Calendar-from-a-Google-Sheet

или вы можете использовать приложение, чтобы выполнить эту задачу для вас, вот пошаговое руководство

https://zapier.com/apps/google-calendar/tutorials/how-to-create-calendar-events-from-spreadsheet-tutorial

0 голосов
/ 04 ноября 2019

Я написал этот небольшой фрагмент кода, который создает повторяющиеся события, используя данные в листах.

Я не записывал это в триггер, поэтому вам придется запускать его вручную. Это может быть записано в триггере onEdit , но я не думаю, что это будет лучшей идеей, так как у вас скоро будет множество дубликатов событий, хотя этого можно избежать, добавив некоторое условиекоторая проверяет, существует ли уже событие с этими характеристиками:

function createEvents() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var lastRow = sheet.getLastRow();
  var firstRow = 2;
  var firstCol = 1;
  var numRows = lastRow - firstRow + 1;
  var numCols = 2;
  var data = sheet.getRange(firstRow, firstCol, numRows, numCols).getValues();
  var calId = sheet.getRange("E2").getValue();
  var cal = CalendarApp.getCalendarById(calId);
  var recurrence = CalendarApp.newRecurrence().addYearlyRule();
  for(var i = 0; i < data.length; i++) {
    var title = data[i][1];
    var date = new Date(data[i][0]);
    var event = cal.createAllDayEventSeries(title, date, recurrence);
  }
}

Кроме того, если вы хотите удалить ранее созданные события при создании новых событий, вы должны отслеживать все старые события и немного редактировать этот код, но я не уверен, что вы хотите удалить их.

Обновление:

Если вы хотите создавать события при редактировании листа, без необходимости запуска функции вручную, я 'Я рекомендую использовать onEdit триггер , который создает событие, соответствующее записанной строке. Кроме того, условие может быть добавлено для создания события, только если данные в строке действительны (столбцы A и B не пусты, а значение в столбце A является действительным Дата ).

Следующая функция выполняет все предыдущие действия:

function createEvent(e) {
  var sheet = e.source.getActiveSheet();
  var range = e.range; // Edited range
  var rowIndex = range.getRow(); // Edited row index
  var firstCol = 1;
  var numCols = 2;
  var data = sheet.getRange(rowIndex, firstCol, 1, numCols).getValues()[0];
  var title = data[1];
  var date = data[0];
  // Check whether column A is a valid Date and column B is not empty:
  if(Object.prototype.toString.call(date) === '[object Date]' && title != "") {
    var calId = sheet.getRange("E2").getValue(); // Get calendar id from cell 'E2'
    var cal = CalendarApp.getCalendarById(calId);
    var recurrence = CalendarApp.newRecurrence().addYearlyRule();
    var event = cal.createAllDayEventSeries(title, date, recurrence); // Create event
  }  
}

Для запуска при редактировании этой функции необходим триггер onEdit. Этот триггер должен быть установлен , так как простой триггер не может получить доступ к службам, требующим авторизации .

Вы можете установить этот триггер вручную выполнив следующие действия ( проверьте этот снимок экрана , если у вас возникли проблемы при настройке типа триггера).

Вы также можете установить этот триггер программно, , как описано здесь.

Пожалуйста, дайте мне знать, если это работает для вас сейчас. Я надеюсь, что это поможет.

...