0

我正在研究一個小的Google Apps腳本,該腳本可將選定Google日曆的事件數據導出到新的Google電子表格中選定日期範圍。我遇到的一個問題是,複製到電子表格的時間已經過去了三個小時。有關如何處理此問題並正確顯示事件時間的任何建議?將日曆數據提取到電子表格時處理時區

這裏是我到目前爲止的代碼(這是一個工作正在進行中)

function doGet() { 
    var app = UiApp.createApplication(); 
    var handler = app.createServerHandler("change"); 
    var picker1 = app.createDatePicker().addValueChangeHandler(handler).setId("picker1"); 
    var picker2 = app.createDatePicker().addValueChangeHandler(handler).setId("picker2"); 
    var pickerpanel = app.createHorizontalPanel(); 
    var panel = app.createVerticalPanel(); 
    pickerpanel.add(picker1); 
    pickerpanel.add(picker2); 
    panel.add(pickerpanel); 
    var lb = app.createListBox(false).setId('lbCalSelId').setName('lbCalSelect'); 

    lb.setVisibleItemCount(3); 
    var cals = CalendarApp.getAllCalendars(); 
    for (var i=0; i<cals.length;i++) { 
    lb.addItem(cals[i].getName(),cals[i].getId()); 
    } 
    panel.add(lb); 

    var button = app.createPushButton().setText("Export").setId("button"); 
    var handler = app.createServerClickHandler('doExport').addCallbackElement(panel); 
    button.addClickHandler(handler); 
    panel.add(button); 
    app.add(panel); 
    return app; 
} 

function change(eventInfo) { 
    var app = UiApp.getActiveApplication(); 
    if (eventInfo.parameter.picker1) { 
    UserProperties.setProperties({"DateRangeStart":eventInfo.parameter.picker1}); 
    app.add(app.createLabel("Start date " + eventInfo.parameter.picker1)); 
    } 
    else if (eventInfo.parameter.picker2) { 
    UserProperties.setProperties({"DateRangeEnd":eventInfo.parameter.picker2}); 
    app.add(app.createLabel("End date" + eventInfo.parameter.picker2)); 
    } 

    return app; 
} 

function doExport(eventInfo) { 
    var app = UiApp.getActiveApplication(); 
    var calId = eventInfo.parameter.lbCalSelect; 
    var cal = CalendarApp.getCalendarById(calId); 
    var rangeStart = UserProperties.getProperty("DateRangeStart"); 
    var rangeEnd = UserProperties.getProperty("DateRangeEnd"); 
    app.add(app.createLabel("The button was clicked!")); 
    if (rangeStart && rangeEnd) { 
    app.add(app.createLabel("exporting...")); 
    var events = cal.getEvents(new Date(rangeStart), new Date(rangeEnd)); 
    var eventsData = []; 
    var headerRow = ['Title','Start Time','End Time','Location','Description']; 
    for (var i=0; i < events.length; i++) { 
    var eventData = []; 
    eventData.push(events[i].getTitle()); 
    eventData.push(events[i].getStartTime()); 
    eventData.push(events[i].getEndTime()); 
    eventData.push(events[i].getLocation()); 
    eventData.push(events[i].getDescription()); 
    eventsData.push(eventData); 
    } 
    var ss = SpreadsheetApp.create("Export of " + cal.getName() + " from " + rangeStart + " to " + rangeEnd); 
    var sheet = ss.getSheets()[0]; 
    var destRange = sheet.getRange(1, 1, events.length, headerRow.length); 
    destRange.setValues(eventsData); 
    } 
    else { 
    app.add(app.createLabel("Range not specified.")); 
    } 

    return app; 
} 
+1

確保日曆的時區與電子表格所在的時區相同。 'SpreadsheetApp.getActiveSpreadsheet()getSpreadsheetTimeZone();'。另外,它的範圍時間是關閉的嗎?或日曆事件時間? – 2013-02-14 18:17:13

回答

1

我想通了。

我只是將電子表格的時區設置爲與日曆相同的時區,並且它像魅力一樣工作。

ss.setSpreadsheetTimeZone(cal.getTimeZone()); 
相關問題