Улучшенная версия скрипта. В ней айди календаря берется из ячейки H1 Идет проверка мероприятий на повторки. Код использует функцию getEvents() для получения списка существующих событий с таким же названием и временем начала и окончания, как у события, которое мы хотим создать. Если событие уже существует, мы просто пропускаем его и выводим сообщение в журнал. Если событие не существует, мы создаем его и выводим ссылку на него. function exportEvents() { // First, import the necessary libraries var sheets = SpreadsheetApp.getActive().getSheetByName("Sheet1"); var calendarId = sheets.getRange("H1").getValue(); // Next, set up the calendar service var calendar = CalendarApp.getCalendarById(calendarId); // Then, read the data from the spreadsheet var data = sheets.getDataRange().getValues(); // Now, loop through the events and create them in the calendar for (var i = 1; i < data.length; i++) { var eventData = data[i]; var title = eventData[2]; var description = eventData[3]; var startTime = new Date(eventData[4]); var endTime = new Date(eventData[5]); var existingEvent = calendar.getEvents(startTime, endTime, {search: title}).pop(); if(existingEvent) { Logger.log("Event already exists: " + existingEvent.getTitle()); } else { var event = calendar.createEvent(title, startTime, endTime, { description: description }); Logger.log("Event created: " + event.getHtmlLink()); } } } В столбце C название события, в столбце D описание события, в столбце E начало события, в столбце F конец события, в ячейке H1 находится идентификатор календаря.
function exportEventsToCalendar() { // Get the current spreadsheet var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); // Get the calendar ID from cell I1 var calendarId = spreadsheet.getRange("I1").getValue(); // Get the notification email from cell J1 var notificationEmail = spreadsheet.getRange("J1").getValue(); // Get the active sheet var eventsSheet = spreadsheet.getActiveSheet(); // Get the data range in the events sheet var dataRange = eventsSheet.getDataRange(); // Get the data in the data range var data = dataRange.getValues(); // Get the calendar var calendar = CalendarApp.getCalendarById(calendarId); if(calendar){ // Loop through the data for (var i = 1; i < data.length; i++) { var eventNumber = data[i][0]; var eventName = data[i][3]; var eventDescription = data[i][4]; var eventEndDate = new Date(data[i][5]); var eventStartDate = new Date(data[i][5]); eventStartDate.setHours(9); eventStartDate.setMinutes(0); eventEndDate.setHours(18); eventEndDate.setMinutes(0); // Check if the event already exists in the calendar var existingEvents = calendar.getEvents(eventStartDate, eventEndDate, {search: eventName}); if (existingEvents.length == 0) { // Create the event var event = calendar.createEvent(eventName, eventStartDate, eventEndDate, {description: eventDescription}); // Send a notification email MailApp.sendEmail(notificationEmail, "Новое событие в календаре!", "В Вашем календаре матрицы ответственности добавлено новое событие с названием: `" + eventName + "`, и описанием события: `" + eventDescription + "`"); } else { for (var j = 0; j < existingEvents.length; j++) { var existingEvent = existingEvents[j]; if (existingEvent.getTitle() == eventName && existingEvent.getDescription() == eventDescription) { // do nothing } else { var event = calendar.createEvent(eventName, eventStartDate, eventEndDate, {description: eventDescription}); MailApp.sendEmail(notificationEmail, "Новое событие в календаре!", "В Вашем календаре матрицы ответственности добавлено новое событие с названием: `" + eventName + "`, и описанием события: `" + eventDescription + "`"); } } } } } else{ Logger.log("Calendar not found"); } }
не получается по вашему скрипту, подскжаите пожалуйста, может быть у вас есть еще круче версия ?)) задача обновлять календарь по данным из гугл таблицы @@pashaorlov4769
Надеюсь этот комментарий хоть кто-то увидит. Здравствуйте, @Сделано! О сложном - просто Подскажите как добавить експорт цвета в календарь? Прописываю: var cvet = table.getRange(i,1).getValue(); cal.createEvent(title,datn,datk,{location:mesto,description:primech,colors:cvet}); У меня первый столбец отвечает за цвет т.е. выбранная цифра от 1-11, но при експорте скрипт не срабатывает только на цвет события в календаре - остальное всё переносит... а цвет согласно шкале не заливает.... На импорт я прописал, и с ним проблем нет цифру он проставляет, а вот на экспорт не работает оставляет пустое значение....
Не получается из таблицы передавать в календарь цвет событий. Из календаря в таблицу все нормально записывается. Может сможете подсказать как должна выглядеть строка передачи в календарь.
Добрый день! Нужно не запись выделять цветом, а придавать ей признак того или иного календаря. Дело в том, что в гугл можно вести на одной "сетке" несколько календарей, например: основной, личный, памятные даты. Через настройки календаря для каждого из них настраивается свой цвет.
Спасибо за уроки! Подскажите, возможен ли импорт/экспорт повторяющихся событий? Как в Google Таблице указать "повторяется еженедельно" так чтобы понял Google календарь?
Вот такая конструкция позволит вывести в таблицу признак повторяющегося события (Истина/Ложь) var povtor = dann[i].isRecurringEvent(); table.getRange(i+5, 6).setValue(povtor); Но само повторяющееся событие выгрузится в таблицу несколько раз. Точно так-же Вы можете выгрузить несколько значений одного события для разных дат. Я планирую сделать более подробный урок по календарю, а именно по сериям событий, но чуть позже