Google листы в календарь - обновить предыдущий сценарий события - PullRequest
0 голосов
/ 17 февраля 2020

У меня установлен бюджет в листах и ​​скрипт для обновления календаря с указанием сроков. Мой сценарий:

function onOpen() {
  var ui = SpreadsheetApp.getUi();
  ui.createMenu('Sync to Calendar')
      .addItem('Unpaid Items', 'unpaidItems')
      .addItem('Delete All', 'deleteEvent')
      .addToUi();
};

function unpaidItems() {
var spreadsheet = SpreadsheetApp.getActiveSheet();

//First Calendar beceause of different colour
var calendarId = spreadsheet.getRange("K72").getValue();
var eventCal = CalendarApp.getCalendarById(calendarId);

//Second Calendar beceause of different colour
var calendarIdPaid = spreadsheet.getRange("K71").getValue();
var eventCalPaid = CalendarApp.getCalendarById(calendarIdPaid);


var signups = spreadsheet.getRange("B15:I16").getValues();

  for (x=0; x<signups.length; x++) {
    var shift = signups[x];
    var statt = shift[7];    

    if (statt == "Required Soon" ) {
       var Debtor = shift[0];
       var startTime = shift[6];
       var endTime = shift[6];
       eventCal.createAllDayEvent(Debtor, startTime, endTime+1);
      //Ideally to use a single calendar and change the color of this entry
    }
    else if (statt == "Late Payment" ) {
       var Debtor = shift[0];
       var startTime = shift[6];
       var endTime = shift[6];
       eventCal.createAllDayEvent(Debtor, startTime, endTime+1);
      //Ideally to use a single calendar and change the color of this entry
    }
    else if (statt == "Paid" ) {
       var Debtor = shift[0];
       var startTime = shift[6];
       var endTime = shift[6];
       eventCalPaid.createAllDayEvent(Debtor, startTime, endTime+1);
      //Ideally to use a single calendar and change the color of this entry
      //This entry would have existed under Required soon or Late Payment so that has to be deleted now and replaced with this in a green colour showing its been paid
    }
  }
}

** Все работает, но в разделе «Для» есть несколько хэшированных элементов. Как я могу:

  1. Использовать один календарь, но изменить цвет события входа в зависимости от того, требуется ли оно в ближайшее время, Поздний платеж или Оплачено?

  2. Что еще более важно, после того, как предмет был оплачен, он помечается на листе, но его все равно необходимо удалить из моего календаря или обновить зеленым цветом, чтобы указать, что он уже оплачен.

1 Ответ

0 голосов
/ 17 февраля 2020

Вы можете установить цвета событий с помощью метода setColor (color)

Таким образом, вы можете выбирать между цветами событий, как указано здесь .

Просто внедрите в каждом из ваших if операторов требуемый цвет события, например

    ...
    else if (statt == "Paid" ) {
       var Debtor = shift[0];
       var startTime = shift[6];
       var endTime = shift[6];
       var event = eventCalPaid.createAllDayEvent(Debtor, startTime, endTime+1);
       event.setColor(CalendarApp.EventColor.GREEN);      
    }
    ...

ОБНОВЛЕНИЕ

, если вы хотите сначала проверить событие или существует и измените, если есть - вы можете сделать это следующим образом:

    ...
    else if (statt == "Paid" ) {
       var Debtor = shift[0];
       var startTime = shift[6];
       var endTime = shift[6];
       var events = eventCal.getEvents(startTime, endTime, {search : Debtor});
       var event = events[0];
       if(!event){
        var event = eventCal.createAllDayEvent(Debtor, startTime, endTime);
       }
       event.setColor(CalendarApp.EventColor.GREEN);      
    }
    ...

Будьте осторожны с endTime+1, ваше событие может быть не найдено, если время не соответствует.

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