我是新的谷歌腳本(任何編程的事情,並拼湊在一起,我已經在互聯網上找到幾個腳本,然後改變了一些事情,我可以找出讓它適用於我的目的,我對此很感興趣,並希望能夠提供任何教學/解釋,而不僅僅是「答案」。:)提前致謝!谷歌腳本日曆事件時區關閉7小時
總之,我已經創建了這個腳本來計算基於谷歌日曆的員工小時數。該腳本收集所有日曆,提示我一個checkListBox,讓我選擇特定的日曆名稱,然後開始和結束事件範圍的工資日期。我點擊提交,並返回範圍以及事件的長度(以小時爲單位)。然後在腳本生成的頭文件中進行彙總,該頭文件根據電子表格中其他位置的查找工資率計算員工工時的總工資。
一切工作很好....除了...時區是關閉某個地方(7 + hrs)。這是一個問題,因爲有些事件會在我選擇的工資日期之外的日期發生。例如,一個事件日期從一月十五號晚上八點MST開始(這是我的實時時區 - MST或GMT-7)。當你增加7個小時到8點,在16日凌晨3點...工資結束於15日午夜,這個時間不計入總數。
我似乎無法弄清楚在哪裏更改時區的腳本....我在Stackoverflow上進行的搜索催促我檢查了我的日曆tz,並將其設置爲MST(或GMT -7)。我也檢查過腳本屬性,它的時區也設置爲MST。有代碼(我沒有放在那裏......就像我說我從其他地方複製它)似乎指示了某些時區的內容,但是更改後它不會影響腳本的輸出。一個例子是在第一行:var FUS1 = new Date()。toString()。substr(25,6)+':00';
爲了幫助您,請參閱以下代碼。我不知道包含哪些代碼部分(請記住,我是新手),所以我幾乎添加了所有內容。如果不是猶太教,我很抱歉。
var FUS1=new Date().toString().substr(25,6)+':00';
//example : Fri Sep 24 2010 10:00:00 GMT+0200 (CEST)
//
function onOpen() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
Logger.log(FUS1)
var menuEntries = [{name: "Import from Calendar", functionName: "Cal_to_sheet"},
{name: "Delete all sheets", functionName: "delsheets"}
];
ss.addMenu("Calendar Uitilities", menuEntries);
}
//
function importEvents(e) {
var calendar_name = e.parameter.calendar;
var startDate = new Date(e.parameter.start);
var endDate = new Date(e.parameter.end);
var Calendar = CalendarApp.getCalendarsByName(calendar_name);
var sheetName = calendar_name
//
var events = Calendar[0].getEvents(startDate , endDate);
if (events[0]) {
var eventarray = new Array();
var line = new Array();
line.push('Event','Date','Hours');
eventarray.push(line);
for (var i = 0; i < events.length; i++) {
line = new Array();
FUS1=new Date(events[i]).toString().substr(25,6)+':00';
line.push(events[i].getTitle());
line.push(Utilities.formatDate(events[i].getStartTime(), FUS1, "MMM-dd-yyyy"));
line.push((events[i].getEndTime() - events[i].getStartTime())/3600000);
eventarray.push(line);
}
Logger.log(eventarray);// 2D array ready to write to sheet
var sheet = SpreadsheetApp.getActiveSpreadsheet().insertSheet(sheetName);
sheet.getRange(3,1,eventarray.length,eventarray[0].length).setValues(eventarray);
sheet.setColumnWidth(1, 150);sheet.setColumnWidth(2, 75);sheet.setColumnWidth(3, 50)
sheet.setFrozenRows(1)
sheet.getRange('A' + (1)).setValue(sheetName).setBorder(true,true,true,true,true,true).setBackgroundColor('#6C86BA');
sheet.getRange('B' + (1)).setValue('').setBorder(true,true,true,true,true,true).setBackgroundColor('#6C86BA');
sheet.getRange('C' + (1)).setValue('Total \n Pay').setBorder(true,true,true,true,true,true).setBackgroundColor('#52CC52');
sheet.getRange('A' + (2)).setValue('Employee Pay Rate --->').setBorder(true,true,true,true,true,true).setBackgroundColor('#85A6E6');
sheet.getRange('B' + (2)).setFormula('=vlookup(A1,\'DO NOT MOVE!\'!H4:I,2,false)').setBorder(true,true,true,true,true,true).setBackgroundColor('#85A6E6');
sheet.getRange('C' + (2)).setFormula('=C3*B2').setBorder(true,true,true,true,true,true).setBackgroundColor('#66FF66');
sheet.getRange(3,1,1,3).setBorder(true,true,true,true,true,true).setBackgroundColor('#94B8FF');
sheet.getRange('A' + (3)).setValue('Event Description').setBorder(true,true,true,true,true,true).setBackgroundColor('#94B8FF');
sheet.getRange('B' + (3)).setValue('Total').setBorder(true,true,true,true,true,true).setBackgroundColor('#94B8FF');
sheet.getRange('C' + (3)).setFormula('=SUM(C4:C' + (i+3)+ ')').setBorder(true,true,true,true,true,true).setBackgroundColor('#94B8FF');
sheet.getRange('D' + (3)).setValue('Notes').setBorder(true,true,true,true,true,true).setBackgroundColor('#94B8FF');
} else {
var startstring = Utilities.formatDate(e.parameter.start, FUS1, "MMM-dd-yyyy");
var endstring = Utilities.formatDate(e.parameter.end, FUS1, "MMM-dd-yyyy");
Browser.msgBox('no event between ' + startstring + ' et le ' + endstring +' in calendar '+calendar_name);
}
var app = UiApp.getActiveApplication();
app.close();
return app;
}
function Cal_to_sheet() {
var doc = SpreadsheetApp.getActiveSpreadsheet();
var app = UiApp.createApplication().setTitle('Calendar Import').setHeight('320').setWidth('440').setStyleAttribute('background','beige');
// Create a grid with 3 text boxes and corresponding labels
var grid = app.createGrid(3, 2);
grid.setWidget(0, 0, app.createLabel('Calendar:').setWidth('100'));
var list = app.createListBox();
list.setName('calendar');
grid.setWidget(0, 1, list);
var calendars = CalendarApp.getAllCalendars();
for (var i = 0; i < calendars .length; i++) {
list.addItem(calendars[i].getName());
}
grid.setWidget(1, 0, app.createLabel('Payroll Start date:').setWidth('110'));
grid.setWidget(1, 1, app.createDateBox().setId("start"));
grid.setWidget(2, 0, app.createLabel('Payroll End date :').setWidth('110'));
grid.setWidget(2, 1, app.createDateBox().setId("end"));
var panel = app.createVerticalPanel();
panel.add(grid);
var button = app.createButton('Submit');
var handler = app.createServerClickHandler('importEvents');
handler.addCallbackElement(grid);
button.addClickHandler(handler);
panel.add(button);
app.add(panel);
doc.show(app);
}
再次
感謝您的幫助,
ķ