Тёмный

Google Таблицы. Урок 122-3. Синхронизация и удаление данных Google Calendar 

Сделано! О сложном - просто
Подписаться 42 тыс.
Просмотров 3,6 тыс.
50% 1

Опубликовано:

 

30 окт 2024

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 20   
@ЯрославШуньгин-ш7в
Здравствуйте ! Подскажите, пожалуйста, как сделать эти «горячие клавиши» ИМПОРТ и ЭКСПОРТ ?
@pashaorlov4769
@pashaorlov4769 Год назад
Улучшенная версия скрипта. В ней айди календаря берется из ячейки 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 находится идентификатор календаря.
@esdelano
@esdelano Год назад
Супер
@pashaorlov4769
@pashaorlov4769 Год назад
@@esdelano сделал в итоге ещё лучше, скину позже вариант))
@pashaorlov4769
@pashaorlov4769 Год назад
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"); } }
@omaewabeatgang5489
@omaewabeatgang5489 Год назад
@@pashaorlov4769 как его запустить? не работает у меня никак:)
@7761706
@7761706 10 месяцев назад
не получается по вашему скрипту, подскжаите пожалуйста, может быть у вас есть еще круче версия ?)) задача обновлять календарь по данным из гугл таблицы @@pashaorlov4769
@RabbitEnergizer
@RabbitEnergizer 9 месяцев назад
Надеюсь этот комментарий хоть кто-то увидит. Здравствуйте, @Сделано! О сложном - просто Подскажите как добавить експорт цвета в календарь? Прописываю: var cvet = table.getRange(i,1).getValue(); cal.createEvent(title,datn,datk,{location:mesto,description:primech,colors:cvet}); У меня первый столбец отвечает за цвет т.е. выбранная цифра от 1-11, но при експорте скрипт не срабатывает только на цвет события в календаре - остальное всё переносит... а цвет согласно шкале не заливает.... На импорт я прописал, и с ним проблем нет цифру он проставляет, а вот на экспорт не работает оставляет пустое значение....
@EgorTankov
@EgorTankov 2 года назад
Не получается из таблицы передавать в календарь цвет событий. Из календаря в таблицу все нормально записывается. Может сможете подсказать как должна выглядеть строка передачи в календарь.
@esdelano
@esdelano 2 года назад
Добрый день! Нужно не запись выделять цветом, а придавать ей признак того или иного календаря. Дело в том, что в гугл можно вести на одной "сетке" несколько календарей, например: основной, личный, памятные даты. Через настройки календаря для каждого из них настраивается свой цвет.
@Premium_Line
@Premium_Line 2 года назад
Спасибо за уроки! Подскажите, возможен ли импорт/экспорт повторяющихся событий? Как в Google Таблице указать "повторяется еженедельно" так чтобы понял Google календарь?
@esdelano
@esdelano 2 года назад
Вот такая конструкция позволит вывести в таблицу признак повторяющегося события (Истина/Ложь) var povtor = dann[i].isRecurringEvent(); table.getRange(i+5, 6).setValue(povtor); Но само повторяющееся событие выгрузится в таблицу несколько раз. Точно так-же Вы можете выгрузить несколько значений одного события для разных дат. Я планирую сделать более подробный урок по календарю, а именно по сериям событий, но чуть позже
@tatjanagratcheva1798
@tatjanagratcheva1798 Год назад
@@esdelano Спасибо большое, очень полезно! А есть ли у вас ещё в планах сделать более подробный урок по календарю, по сериям событий?
@bakhromaka8069
@bakhromaka8069 2 года назад
здравствуйте.спасибо за ролики. а как можно свами связаться вацап,телеграм?
@esdelano
@esdelano 2 года назад
Можно через обратную связь на моем сайте e-sdelano.ru
@КаримСахибов
@КаримСахибов 2 года назад
Интересное решение, но я сделал проверку id мероприятия Следовательно, мероприятия не повторяется
@esdelano
@esdelano 2 года назад
👍
@cbsbelinka
@cbsbelinka 2 года назад
@@esdelano с датой не получилось, так как у меня даты конца нет, дата начало и конец одинаковые. вот бы с названием мероприятия
@cbsbelinka
@cbsbelinka 2 года назад
покажите пожалуйста код скрипта для проверки по айди)))
@viktorijaastratova6481
@viktorijaastratova6481 Год назад
Добрый день, можете, пожалуйста, подсказать код проверки по айди или по названию?
Далее