Created
June 30, 2012 03:15
-
-
Save juanpabloaj/3022001 to your computer and use it in GitHub Desktop.
weekly hours in google calendar to spreadsheet
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| function ymd(date){ | |
| return Utilities.formatDate(date,"CLT","yyyy-MM-dd"); | |
| } | |
| function calendarsColors(){ | |
| var colors = {}; | |
| var cals = CalendarApp.getAllOwnedCalendars(); | |
| for ( var c = 0 ; c < cals.length ; c++){ | |
| colors[cals[c].getName()] = cals[c].getColor(); | |
| } | |
| return colors; | |
| } | |
| function countHours(semana) { | |
| var horas = {}; | |
| var cals = CalendarApp.getAllOwnedCalendars(); | |
| for ( var c = 0 ; c < cals.length ; c++){ | |
| var cal = cals[c]; | |
| var w = semana; | |
| var events = cal.getEvents(w[0], w[1]); | |
| var total = 0 ; | |
| for ( var i = 0 ; i < events.length ; i++){ | |
| var t0 = events[i].getStartTime(); | |
| var t1 = events[i].getEndTime(); | |
| var name = events[i].getTitle(); | |
| // en minutos | |
| var semi = ( t1 -t0 ) / 60000; | |
| total += semi; | |
| } | |
| // en horas | |
| horas[cal.getName()] = total/60; | |
| } | |
| return horas; | |
| } | |
| function week(actual){ | |
| // actual = 0 this week; | |
| // actual = 1 next week; | |
| var startDay = 1 ; //0=sunday, 1=monday | |
| var now = new Date; | |
| // desde las 00:00 | |
| now = new Date( now.getFullYear(), now.getMonth(), now.getDate()); | |
| var today = new Date( now.getTime() + 7 * 86400000 * actual); | |
| var d = today.getDay(); //get the current day | |
| //rewind to start day | |
| var firstday = new Date(today.valueOf() - (d<=0 ? 7-startDay:d-startDay)*86400000); | |
| //add 7 days to get last day, 00:00 of next week | |
| var lastday = new Date(firstday.valueOf() + 7*86400000); | |
| return [firstday,lastday]; | |
| } | |
| function onOpen() { | |
| var ss = SpreadsheetApp.getActiveSpreadsheet(); | |
| var menuEntries = [{name:"Calculate hours", functionName: "calculateHours"}]; | |
| ss.addMenu("Hours",menuEntries); | |
| } | |
| function calculateHours(){ | |
| var ss = SpreadsheetApp.getActiveSpreadsheet(); | |
| var sheet = ss.getSheets()[0]; | |
| sheet.clear(); | |
| var header = true; | |
| var i=1; | |
| var j=1; | |
| for ( var s = -4 ; s < 4 ; s++){ | |
| var range_week = week(s); | |
| var semana = countHours(range_week); | |
| var colors = calendarsColors(); | |
| if ( header ) { | |
| for ( var k in semana ){ | |
| sheet.getRange(i,j+1).setValue(k); | |
| sheet.getRange(i,j+1).setBackgroundColor(colors[k]); | |
| j++; | |
| } | |
| header = false; | |
| } | |
| j=1; | |
| i++; | |
| for ( var k in semana ){ | |
| var date_cell = ymd(range_week[0]) + " - " + ymd(range_week[1]) ; | |
| sheet.getRange(i,1).setValue(date_cell); | |
| sheet.getRange(i,j+1).setValue(semana[k]); | |
| j++; | |
| } | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment