Google 张日历 - 更新以前的事件脚本

Google sheets to Calendar - Update previous event script

我在 Google 表格中设置了预算,还有一个脚本可以根据截止日期更新我的日历。我的脚本是:

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
    }
  }
}

** 一切正常,但在 "For" 部分中有一些散列的项目。我怎样才能:

  1. 使用单个日历,但根据需要尽快、延迟付款还是已付款来更改输入事件的颜色?

  2. 更重要的是,一旦某个项目已付款,它就会在 sheet 中被标记,但它仍然必须从我的日历中删除或更新为绿色以表明它现在已付款已付款。

您可以使用方法setColor(color)

设置事件颜色

因此,您可以根据指定的事件颜色进行选择 here

只需在每个 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);      
    }
    ...

Be careful with endTime+1, your event might not be found if the times don't correspond.