Я написал этот небольшой фрагмент кода, который создает повторяющиеся события, используя данные в листах.
Я не записывал это в триггер, поэтому вам придется запускать его вручную. Это может быть записано в триггере 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
. Этот триггер должен быть установлен , так как простой триггер не может получить доступ к службам, требующим авторизации .
Вы можете установить этот триггер вручную выполнив следующие действия ( проверьте этот снимок экрана , если у вас возникли проблемы при настройке типа триггера).
Вы также можете установить этот триггер программно, , как описано здесь.
Пожалуйста, дайте мне знать, если это работает для вас сейчас. Я надеюсь, что это поможет.