Berechnung der Gesamtstunden eines Ereignisses in Google Kalender

7

Ich möchte eine wöchentliche Zusammenfassung der Anzahl der Stunden pro Ereignis in einem Google Kalender anzeigen oder erhalten.

Wie kann ich diese Stunden zusammenzählen?

Juan Pablo
quelle

Antworten:

3

Ich habe ein Skript in Google Script geschrieben, das ich gerne beitragen möchte, falls es jemand anderem hilft, über diese Frage zu stolpern. Ich habe einige angepasst Code aus dem Google-Beispielcode in der Kalender-API .

Schritte

  1. Gehen Sie zu Ihrem Google Drive und starten Sie eine neue leere Tabelle.
  2. Gehen Sie zum Menü: ExtrasSkripteditorLeeres Dokument .
  3. Kopieren Sie den Code und fügen Sie ihn ein und in die neuen Code.gs ein. Speichern Sie die Datei
  4. Gehen Sie zum Menü: Ressourcen Erweiterte Google-Dienste
  5. Blättern Sie, bis Sie das finden Kalender API und schalten ON
  6. Klicken Sie auf den Link zur Google Developers Console. Eine neue Registerkarte wird geöffnet.
  7. Geben Sie im Suchfeld Kalender ein, klicken Sie auf Kalender-API und aktivieren Sie sie.
  8. Kehren Sie nach der Aktivierung zum Fenster mit dem Code zurück und klicken Sie auf OK, um zurückzukehren.
  9. Passen Sie die gbl ... vars an Ihr Interesse an.
  10. Gehen Sie zum Menü: AusführenAusführen
  11. Eine Autorisierungsanforderung wird angezeigt. Akzeptieren Sie sie.
  12. Wenn alles gut gegangen ist, sollten Sie in der Lage sein, zum Blatt zurückzukehren und die Ergebnisse zu sehen.

Hier ist der Link zum Skript: http://gist.github.com/paucoma/7b7b6cecddfa79d25531#file-gglcaleventsonspreadsheet-gs

Pau Coma Ramirez
quelle
2

Aufgrund meines Bedarfs habe ich festgestellt, dass Sie eine Frage haben.

Später fand ich eine nette Lösung: GTimeReport

domi27
quelle
1
Wenn Sie mit dem Produkt verbunden sind, geben Sie dies bitte in Ihrer Antwort an und erklären Sie, wie das Produkt das Problem löst.
Jonsca
Obwohl diese Antwort viel detaillierter hätte beantwortet werden können, usw. ... hat es mir sehr geholfen! Tolles kleines Werkzeug. Vielen Dank!
Sibe
1

Schließlich habe ich das Google Apps-Skript über eine Google-Tabelle verwendet, den Code in einem Github-Kern .

// add menu
function onOpen() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var menuEntries = [{name:"Calcular Horas", functionName: "calculateHours"}];
ss.addMenu("Hours", menuEntries);
// calcular al iniciar
calculateHours();
}

function count_hours(cal_id, event_name){
var hours = 0;
var cal = CalendarApp.getCalendarById(cal_id);
var this_year = new Date(2013,0,1);
var now = new Date()
var events = cal.getEvents(this_year, now, {search: event_name});
for ( i = 0 ; i < events.length ; i++){
var event = events[i];
if ( event_name.toLowerCase() == event.getTitle().toLowerCase() ) {
//Logger.log(event.getTitle());
var start = event.getStartTime() ;
var end = event.getEndTime();
start = new Date(start);
end = new Date(end);
hours = hours + ( end - start ) / ( 1000 * 60 * 60 );
}
}
var cal_name = cal.getName();
// retorna el nombre del calendario y numero de horas del evento
return [cal_name, hours];
}

function hours_in_events(events){
var hours = 0;
for ( i = 0 ; i < events.length ; i++){
var event = events[i];
Logger.log(event.getTitle());
var start = event.getStartTime() ;
var end = event.getEndTime();
start = new Date(start);
end = new Date(end);
hours = hours + ( end - start ) / ( 1000 * 60 * 60 );
}
return hours;
}

function authorize() {
var oauthConfig = UrlFetchApp.addOAuthService("calendar");
var scope = "https://www.googleapis.com/auth/calendar";
oauthConfig.setConsumerKey("anonymous");
oauthConfig.setConsumerSecret("anonymous");
oauthConfig.setRequestTokenUrl("https://www.google.com/accounts/OAuthGetRequestToken?scope="+scope);
oauthConfig.setAuthorizationUrl("https://accounts.google.com/OAuthAuthorizeToken");
oauthConfig.setAccessTokenUrl("https://www.google.com/accounts/OAuthGetAccessToken");
}

/*
* Count hours of events with same name
*/
function countHours(calId, eventName){
authorize();
var cal = CalendarApp.getCalendarById(calId);
var key = "...";
var query = encodeURIComponent(eventName);
calId = encodeURIComponent(calId);
var params = {
method: "get",
oAuthServiceName: "calendar",
oAuthUseToken: "always",
};
var url = "https://www.googleapis.com/calendar/v3/calendars/"+
calId+"/events?q=" + query + "&key=" + key;
var request = UrlFetchApp.fetch(url, params);
var response = Utilities.jsonParse(request.getContentText());
//Logger.log(response);
var cal_name = response.summary;
var items = response.items;
var start, end;
var hours = 0;
for ( i = 0 ; i < items.length ; i++){
if ( items[i].status != "cancelled" ){
if ( items[i].summary == eventName ){
start = items[i].start.dateTime;
end = items[i].end.dateTime;
start = new Date(start.replace(/-/g,'/').replace(/[A-Z]/,' ').substr(0,19) );
end = new Date(end.replace(/-/g,'/').replace(/[A-Z]/,' ').substr(0,19));
hours = hours + ( end - start ) / ( 1000 * 60 * 60 );
}
}
}
// retorna el nombre del calendario y numero de horas del evento
return [cal_name, hours];
}

function calculateHours(){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var id_cal_pos = 1;
var event_name_pos = 2;
var cal_name_pos = 1;
var total_hours_pos = 4;
var s = ss.getSheets()[0];
var rows = s.getDataRange();
var nRows = rows.getNumRows();
var values = rows.getValues();
// from second row
for ( var i = 1; i < nRows ; i ++){
var row = values[i];
var cal_hours = count_hours(row[id_cal_pos], row[event_name_pos]);
var h = cal_hours[1];
var cal_name = cal_hours[0];
s.getRange(i+1, cal_name_pos).setValue(cal_name);
s.getRange(i+1, total_hours_pos).setValue(h);
}
}
Juan Pablo
quelle
Und wenn dieser Link nicht mehr funktioniert?
Ale
@ AlEverett nichts ist für immer. Ich habe es vorgezogen, den Code in eine Github-Liste zu schreiben, weil ich Aktualisierungen gegenüber dem Code vornehme.
Juanpablo
Dies war sehr hilfreich für den Einstieg - danke für das Wesentliche! Sie müssen nur wissen, dass Sie eine Tabelle erstellen müssen, in der sich die Kalender-ID in B2 und der Name der Besprechung in B3 befindet
Ultrasaurus
1

Ein sehr schönes Google Kalender Seitenleiste (kostenlos) Gadget. Es summiert die Aktivitäten nach Tags, die Sie in die Ereignisbeschreibung schreiben.

http://www.theproductivitygame.com/TimeTracker

Tags können in der Aufgabenbeschreibung in folgender Form erstellt werden:

Tags: tagName1, tagName2 usw.

Dabei ist tagName der Tag / Label-Name, nach dem Sie zusammenfassen möchten

Danny
quelle
Dieses Gadget ist nicht mehr verfügbar (ich bin der Autor).
David Braun