Makro pre google documents - Export z google calendar

Vyžaduje Google konto s kalendárom a dokumentami.


Po kliku na working hours len nastavíte dátum "od" a vyberiete kalendár. Zobrazia sa všetky výsledky do dnešného dňa

Ako nainštalovať:

Na https://drive.google.com kliknúť vytvoriť dokument -> tabulka

V tabuľke kliknite v hornom menu na Nástroje->Editor Skriptov

Vložte skript a uložte

function listEvents(e) {

  var calendar_name = e.parameter.calendar;
  var startDate = new Date(e.parameter.year, e.parameter.month - 1, e.parameter.day);
  var endDate = new Date();
  var Calendar = CalendarApp.getCalendarsByName(calendar_name);
  var sheetName = calendar_name + "-" + e.parameter.year + "-" + e.parameter.month;

  var events = Calendar[0].getEvents(startDate , endDate);
  if (events[0]) {
    var eventarray = new Array();
    var line = new Array();
    line.push('Datum');
    line.push('Ukon');
    line.push('Zaciatok');
    line.push('Koniec');
    line.push('Cas');
    eventarray.push(line);
    
    var i = 0;
    for (i = 0; i < events.length; i++) {
      line = new Array();
      var st = events[i].getStartTime();
      var et = events[i].getEndTime();
      line.push(st.getDate() + "." + (st.getMonth()+1) + "." + st.getYear());
      line.push(events[i].getTitle());
      line.push(st.getHours() + ":" + st.getMinutes());
      line.push(et.getHours() + ":" + et.getMinutes());
      line.push((events[i].getEndTime() - events[i].getStartTime()) / 3600000);
      eventarray.push(line);
    }
    line = new Array();
    line.push('');
    line.push('');
    line.push('');
    line.push('Spolu');
    line.push('');
    eventarray.push(line);
    var sheet = SpreadsheetApp.getActiveSpreadsheet().insertSheet(sheetName);
    sheet.getRange('A1:E' + (i+2)).setValues(eventarray);
    sheet.getRange('E' + (i+3)).setFormula('=SUM(E2:E' + (i+2)+ ')');
  } else {
    Browser.msgBox('nothing between ' + startDate + ' till ' + endDate);
  }
  
  var app = UiApp.getActiveApplication();
  app.close();
  return app;  
}
function workingHoursTool() {
  var doc = SpreadsheetApp.getActiveSpreadsheet();
  var app = UiApp.createApplication().setTitle('Export working hours');
  // Create a grid with 3 text boxes and corresponding labels
  var grid = app.createGrid(4, 2);
  grid.setWidget(0, 0, app.createLabel('Calendar name:'));
  
  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.a
    list.addItem(calendars[i].getName());
  }
        
  grid.setWidget(1, 0, app.createLabel('Year:'));
  grid.setWidget(1, 1, app.createTextBox().setName('year'));
  grid.setWidget(2, 0, app.createLabel('Month'));
  grid.setWidget(2, 1, app.createTextBox().setName('month'));
  grid.setWidget(3, 0, app.createLabel('Day'));
  grid.setWidget(3, 1, app.createTextBox().setName('day'));
  
  // Create a vertical panel..
  var panel = app.createVerticalPanel();
  
  // ...and add the grid to the panel
  panel.add(grid);
  
  // Create a button and click handler; pass in the grid object as a callback element and the handler as a click handler
  // Identify the function b as the server click handler

  var button = app.createButton('submit');
  var handler = app.createServerClickHandler('listEvents');
  handler.addCallbackElement(grid);
  button.addClickHandler(handler);
  
  // Add the button to the panel and the panel to the application, then display the application app in the Spreadsheet doc
  panel.add(button);
  app.add(panel);
  doc.show(app);
}

function onOpen() {   setMenus();   }
function setMenus() {
 var ss = SpreadsheetApp.getActiveSpreadsheet();
  var menuEntries = [{name: "Export from calendar", functionName: "workingHoursTool"}];  
  ss.addMenu("Working Hours", menuEntries);  }  


Po uložení zavrite dokument a otvorte ho ešte raz. Teras sa v hornej lište do niekoľkých sekúnd zobrazí Working Hours