Создать событие из Spreasheeet в Google Calendar - PullRequest
0 голосов
/ 19 января 2020

У меня есть лист

С 2 столбцами для сроков выполнения моих задач.

Как создать сценарий, который может создавать события на основе этих сроков даты и уведомить меня за несколько дней до того, что они должны?

Спасибо

1 Ответ

0 голосов
/ 19 января 2020

Создание событий из электронной таблицы

getEvent() читает электронную таблицу ниже, которая очень похожа на ту, которую вы предоставили с несколькими изменениями, как я опишу. Я добавил заголовок события и описание колонки. Столбец «Запланировано» позволяет предотвратить повторение событий при повторном запуске сценария. Столбец Расписание представляет собой подтверждение данных («Да» / «Нет»).

enter image description here

function getEventData() {
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName('EventData');
  var sr=4;//data start row
  var lc=8;//last column
  var hA=sh.getRange(sr-1,1,1,lc).getValues()[0];
  var idx={};//correlate column header to evA indices
  hA.forEach(function(e,i){idx[e]=i;});//This creates an object for identifying array indices through the use of Column header name making it a bit easier to associate data with their value descriptions
  var rg=sh.getRange(sr,1,sh.getLastRow()-sr+1,lc );
  var evA=rg.getDisplayValues();
  evA.forEach(function(r,i){
    if(r[idx.Scheduled]!='Yes') {
      var eObj={};
      eObj.start=r[idx.Start];
      eObj.end=r[idx.End];
      eObj.title=r[idx.Title];
      eObj.description=Utilities.formatString('<b>Name:</b> %s,%s<br /><b>Age:</b> %s<br /><b>Description:</b> %s',r[idx.Last],r[idx.First],r[idx.Age],r[idx.Description]);
      if(createEventWithReminders(eObj)) {
        sh.getRange(i+sr,idx.Scheduled+1).setValue('Yes');
      }else{
        sh.getRange(i+sr,idx.Scheduled+1).setValue('No');
      }
    }
  });
}

Функция createEventWithReminders принимает объект и создает событие в любом календаре, который вы указываете с помощью идентификатора календаря, который вы должны предоставить.

//{start:dd/MM/yyyy,end:dd/MM/yyyy,title:string,description:string}
function createEventWithReminders(eObj)  {
  if(eObj.start && eObj.end && eObj.title && eObj.description) {
    var minute=1;
    var hour=60*minute;
    var day=24*hour;
    var week=7*day;
    var cal=CalendarApp.getCalendarById('Enter your calendar id');
    var sA=eObj.start.split('/');//splits the date string into fullyear,month and day
    var start=new Date(sA[2],sA[1]-1,sA[0]);//creates the start date notice the month-1
    var eA=eObj.end.split('/');
    var end=new Date(eA[2],eA[1]-1,eA[0]);
    var event=cal.createEvent(eObj.title, start, end);
    event.setDescription(eObj.description)
    event.setTitle(eObj.title)
    event.addEmailReminder(day);//creates a one day prior reminder
    event.addEmailReminder(week);//creates a one week prior reminder
    return true;
  }else{
    return false;
  }
}

Анимация:

enter image description here

создать событие

добавить напоминания по электронной почте

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...