Перейти к содержимому








Фотография
Нужна помощь

Google Apps Script (JS) Помогите подкорректировать скрипт



Лучший Ответ friendly, 25 Март 2019 - 14:19

короче, обошла проблему через https://ifttt.com

часть нехватающего функционала - заменила бесплатным сервисом, с тригером на событие в календаре

 

вывод: не надо лезть где не в зуб ногой

я так поняла, что большинство профи заняты сложными или глобальными задачами

а с новичками поступают просто - читай документацию, которая написана не для новичков.

 

Получается замкнутый круг, из которого выход с азов все разбирать и очень много все копать - а это не вариант.

 

Ну ладно, в след. раз 200-500 руб заплачу за 20 строк кода. 

 

Запомню.

Перейти к сообщению


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 4

#1 friendly

friendly
  • Platinum
  • Сообщений: 886
  • Регистрация: 05.06.2014
  • Заработано: 109 руб.
Репутация: 193

Награды: 24

  
  
  
  
  
  
  
  

Отправлено 24 Март 2019 - 20:06

Помогите пожалуйста довести до ума скрипт  :blush:  :blush:

 

 

Что нужно сделать, задача:

 

- есть 1 таблица Google spreadsheet и 1 Google Calendar

- когда в Google Calendar добавляется 1 event 

- срабатывает trigger (on change calendar)

- триггер срабатывает на добавление этого событие
в конец таблицы spreadsheet в виде строки (с основными параметрами event)

 

и все повторяется при следующем добавлении нового события в календарь

 
-------------------------------------------------
 
На данный момент есть такой скрипт,
который тупо собирает все(!) события между двумя датами ("01/03/2019 12:00 AM") и ("24/03/2019 12:00 AM")
есть возможность очистить spreadsheet перед добавлением (закомментированно)
 
-------------------------------------------------
 
function getEvents() {
var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); 
var cal = CalendarApp.getCalendarById("[email protected]"); 
var events = cal.getEvents(new Date("01/03/2019 12:00 AM"), new Date("24/03/2019 12:00 AM")); 
 
 
// var lr = ss.getLastRow(); 
// ss.getRange(2, 1,lr-1,5).clearContent(); 
 
for(var i = 0;i<events.length;i++) { 
 
var title = events[i].getTitle(); 
var sd = events[i].getStartTime();
var ed = events[i].getEndTime(); 
var lос = events[i].getLocation(); 
var des = events[i].getDescription(); 
var eid = events[i].getDescription();
 
ss.getRange(i+2, 1).setValue(title); 
ss.getRange(i+2, 2).setValue(sd);
ss.getRange(i+2, 2).setNumberFormat("mm/dd/yyyy h:mm:ss AM/PM");
ss.getRange(i+2, 3).setValue(ed);
ss.getRange(i+2, 3).setNumberFormat("mm/dd/yyyy h:mm:ss AM/PM");
ss.getRange(i+2, 4).setValue(lос);
ss.getRange(i+2, 5).setValue(des);
 
  Logger.log(title);
  }
}

 

--------------------------------------------------------

 

предполагаю надо как-то использовать -  getLastUpdated()

т.к. нам надо добавить последней строкой - только  последнее, т.е. одно, добавленное событие,

т.е. скрипт должен работать на 1 событие - 1 добавление строки в конец таблицы

а не все события собирать за некий период.

 

Как это реализовать??

 

 

Спасибо заранее!!! ++++++++++++  :wub:  :wub:  :wub:


Сообщение отредактировал friendly: 24 Март 2019 - 20:08

  • 0

#2 ray1978

ray1978
  • Premium
  • Сообщений: 553
  • Регистрация: 02.12.2013
  • Заработано: 71 руб.
Репутация: 242

Награды: 23

  
  
  
  
  
  
  
  

Отправлено 25 Март 2019 - 02:22

Скорей всего, сильно не заморачиваясь, следует подправить цикл, где перебираются события с последующим выводом.

Можно организовать два варианта.
1, сам цикл, который бегает от i=0 до размера массива собранных сведений (events.lenght). Этот цикл сократить путем установки i в events.length-1

2. Сразу, В самом цикл сделать проверку

Если i <>events.lenght ,то contini.. (команда продолжить). А дальше все как есть в цикле оставляем.

Можно подобное условие обыграть еще так
Команды вывода события обернуть в условие
Если i = events.lenght {.... Команды вывода события...}

Сообщение отредактировал ray1978: 25 Март 2019 - 02:26

  • 1

#3 friendly

friendly
  • Platinum
  • Сообщений: 886
  • Регистрация: 05.06.2014
  • Заработано: 109 руб.
Репутация: 193

Награды: 24

  
  
  
  
  
  
  
  

Отправлено 25 Март 2019 - 07:47

Точно, я не додумалась! (((

 

Попробую из массива - последнее значение вытянуть.

 

Я не знаю JS, но понимаю, что это задача легкая.

 

Просто не могу понять - как использовать getLastUpdated() - ведь это решение намного логичее и проще.

 

Хотя пока писала, мысль пришла...

 

Кто знает нормальное место где отвечают ламерам в JS ??


  • 0

#4 friendly

friendly
  • Platinum
  • Сообщений: 886
  • Регистрация: 05.06.2014
  • Заработано: 109 руб.
Репутация: 193

Награды: 24

  
  
  
  
  
  
  
  

Отправлено 25 Март 2019 - 08:02

по идее должно работать что-то такое:

 

function getEvents() {
var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); 
var cal = CalendarApp.getCalendarById("[email protected]"); 
var events = cal.getEvents(new Date("21/03/2019 12:00 AM"), new Date("26/03/2019 12:00 AM")); 
 
var lst = events.getLastUpdated();
var lr = ss.getLastRow();
  
}
 
но выдает ошибку - как раз на строке var lst = events.getLastUpdated(); 
и вот так:  var lst = cal.getLastUpdated();  тоже не работает.
 
Блин. Как использовать getLastUpdated не пойму.

  • 0

#5 friendly

friendly
  • Platinum
  • Сообщений: 886
  • Регистрация: 05.06.2014
  • Заработано: 109 руб.
Репутация: 193

Награды: 24

  
  
  
  
  
  
  
  

Отправлено 25 Март 2019 - 14:19   Лучший Ответ

короче, обошла проблему через https://ifttt.com

часть нехватающего функционала - заменила бесплатным сервисом, с тригером на событие в календаре

 

вывод: не надо лезть где не в зуб ногой

я так поняла, что большинство профи заняты сложными или глобальными задачами

а с новичками поступают просто - читай документацию, которая написана не для новичков.

 

Получается замкнутый круг, из которого выход с азов все разбирать и очень много все копать - а это не вариант.

 

Ну ладно, в след. раз 200-500 руб заплачу за 20 строк кода. 

 

Запомню.


Сообщение отредактировал friendly: 25 Март 2019 - 14:21

  • 0



Похожие темы Collapse

Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 анонимных

×

Зарегистрируйся моментально!