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