0

下面的代碼完美地工作。但是,我現在需要重複發生的事件只在平日(M-F)出現。 例如,如果我在2014年9月2日設立了定期會議,未來的會議最終會在週末結束。 這些經常性會議如何才能在平日顯示? 例如,如果會議在星期六舉行,請將其移至前一天(星期五)的前一天。另一方面,如果會議在星期日舉行,則將其移至(星期一)後一天。 這可能嗎?僅在工作日從Google表格創建反覆出現的Google日曆活動

我已經使用CalendarApp.Weekday.MONDAY,等等功能嘗試,但它最終改寫從代碼中.addMonthlyRule()函數...

// Date | Title | Start Time | End Time | Location | Description | Recurring (months) | EventID 
function onOpen() { 
    var sheet = SpreadsheetApp.getActiveSpreadsheet(); 
    var entries = [{ 
    name : "Export Events", 
    functionName : "exportEvents" 
    }]; 
    sheet.addMenu("Calendar Actions", entries); 
}; 

/*** Export events from spreadsheet to calendar */ 
function exportEvents() { 
    var sheet = SpreadsheetApp.getActiveSheet(); 
    var headerRows = 1; // Number of rows of header info (to skip) 
    var range = sheet.getDataRange(); 
    var data = range.getValues(); 
    var calId = "[email protected]com"; 
    var cal = CalendarApp.getCalendarById(calId); 
    for (i in data) { 
    if (i < headerRows) continue; // Skip header row(s) 
    var row = data[i]; 
    var date = new Date(row[0]); // First column 
    var title = row[1];   // Second column 
    var tstart = setTimeToDate(date,row[2]); 
    var tstop = setTimeToDate(date,row[3]); 
    Logger.log('date = '+date+'tstart = '+tstart+' tstop = '+tstop); 
    var loc = row[4]; 
    var desc = row[5]; 
    var times = row[6] 
    var id = row[7]; 
    // Check if event already exists, update it if it does 
    try { 
     var event = cal.getEventSeriesById(id); 
     event.setTitle('got you');// this is to "force error" if the event does not exist, il will never show for real ;-) 
    }catch(e){ 
     var newEvent = cal.createEvent(title, tstart, tstop, {description:desc,location:loc}); // create a "normal" event 
     row[7] = newEvent.getId(); // Update the data array with event ID 
     Logger.log('event created');// while debugging 
     var event = cal.getEventSeriesById(row[7]);// make it an event Serie 
    } 
    event.setTitle(title); 
    event.setDescription(desc); 
    event.setLocation(loc); 
     var recurrence = CalendarApp.newRecurrence().addMonthlyRule().interval(times) 
     //.onlyOnWeekdays(
     //[CalendarApp.Weekday.MONDAY, CalendarApp.Weekday.TUESDAY, CalendarApp.Weekday.WEDNESDAY, CalendarApp.Weekday.THURSDAY, CalendarApp.Weekday.FRIDAY]); 
     event.setRecurrence(recurrence, tstart, tstop);// we need to keep start and stop otherwise it becomes an AllDayEvent if only start is used 
     } 
    range.setValues(data); 
} 

function setTimeToDate(date,time){ 
    var t = new Date(time); 
    var hour = t.getHours(); 
    var min = t.getMinutes(); 
    var sec = t.getSeconds(); 
    var dateMod = new Date(date.setHours(hour,min,sec,0)) 
    return dateMod; 
    } 

回答

0

你可以得到一天通過以下的一週:

var d = new Date(); 
var n = d.getDay(); 

星期日是0週一,是1等

+0

我看到,這可怎麼利用具有周期性事件只出現在平日裏? – 2014-08-29 12:47:09

+0

@Arsene de Conde - 這將不可能使用你的邏輯或者至少是非常複雜的,因爲每個事件都應該針對星期幾進行檢查,並且針對這個特定事件進行修改(我認爲這是不可能的)... I建議您從電子表格中創建個別事件,在該電子表格中可以精確控制日期和日期(因爲還有假期可供檢查!)。看到你最近的其他帖子我猜這就是你正在做的對嗎? – 2014-09-11 11:34:35

+0

是的。感謝Serge!這就說得通了。 – 2014-09-11 13:55:45

相關問題