Создать повторяющееся календарное событие на весь день из списка дат в таблице Google

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

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


person N. Wass    schedule 01.11.2019    source источник
comment
Какой тип повторения вы хотите, чтобы ваши мероприятия? Еженедельно? Ежемесячно? Ежегодно?   -  person Iamblichus    schedule 02.11.2019
comment
Я бы хотел, чтобы это мероприятие повторялось ежегодно.   -  person N. Wass    schedule 03.11.2019
comment
Итак, вы хотите, чтобы в вашем календаре создавалось несколько событий каждый раз, когда ваша таблица редактируется. Я не уверен, что это очень хорошая идея, так как скоро у вас будет множество повторяющихся событий, хотя этого можно было бы избежать, добавив какое-то условие, которое проверяет, существует ли уже событие с такими характеристиками. Что более важно, что делать с ранее созданными событиями, которых больше нет в таблице? Следует ли их удалить?   -  person Iamblichus    schedule 04.11.2019
comment
Здравствуйте, ваша проблема решена? Помните, что для того, чтобы пометить ваш вопрос как решенный, вы должны принять любой ответ, содержащий решение вашей проблемы. Если это не так и ваша проблема не решена, подумайте о том, чтобы объяснить, почему это не так, чтобы это сообщество могло вам помочь.   -  person Iamblichus    schedule 06.11.2019
comment
Я определенно не хочу создавать горы из нескольких событий. Я пока не нашел решения. Я пробовал скрипты Google Таблиц и не добился там успеха. Zapier zap работает, за исключением того, что он создает события на 1 выходной день из того, что они перечислены в моем листе Google.   -  person N. Wass    schedule 08.11.2019
comment
Итак, что делать с ранее созданными событиями, которых больше нет на листе? Следует ли их удалить? Кроме того, вы пробовали запустить мой скрипт вручную? Если это сработало, я могу внести некоторые исправления, чтобы внести это в редактирование.   -  person Iamblichus    schedule 08.11.2019
comment
Я обновил свой ответ, посмотрите, сработает ли это для вас.   -  person Iamblichus    schedule 08.11.2019


Ответы (2)


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

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.

person hardy    schedule 01.11.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 является допустимым Date).

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

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 триггер. Этот триггер должен быть установлен, поскольку простой триггер не может получить доступ к службам, требующим авторизации.

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

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

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

person Iamblichus    schedule 04.11.2019