17
19

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Google Apps ScriptAdvent Calendar 2012

Day 10

カレンダーから作業時間を計算するスクリプトを作った!

Last updated at Posted at 2012-12-09

これは、Google Apps Script Advent Calendar 2012の10日目の記事です。

フライングしてますが、前から欲しかったので一気に作ってみました。
今回はGoogle Calendarに登録してある予定(実績)から、かかった時間(=作業時間)を
計算するGoogle Apps Scriptを作ってみました。

実際の業務でも「XXX作業、?時間」という報告をすることもあるでしょう。
(えっ?今の時代にそんな事しない?)

そういう報告するためのデータをGoogle Calendarで管理して、勝手にGASで計算して、文面を整えて、メールで上司に飛ばしたら非常に便利だと思います。
ここでは、カレンダーから時間を計測する部分のみを紹介します。

作成したコード

コード.gs
function myFunction() {
  var calendarName = "登録しているカレンダー名";
  var title = "<取得したい作業名>";
  
  // 今回は敢えて期間は長めに!
  var startTime = new Date("2012/08/01");
  var endTime = new Date("2013/01/01");
  
  // カレンダーの名前からカレンダーオブジェクトを取得
  // (複数の可能性があるので配列で返るよ!)
  var calendars = CalendarApp.getCalendarsByName(calendarName);
  for(var i = 0; i < calendars.length; i++) {
    // 開始時間と終了時間を指定することで、特定の期間のイベントを全て取得。
    var events = calendars[i].getEvents(startTime, endTime);
    Logger.log("全イベント数 = %s", events.length);
    
    var allTime = 0;
    var targetCount = 0;
    for(var count = 0; count < events.length; count++) {
      // カレンダーのタイトルでの絞り込みはできないので
      // 全てのイベントのタイトルで比較する。
      if(events[count].getTitle() == title) {
        targetCount++;
        var event_start = events[count].getStartTime();
        var event_end = events[count].getEndTime();
        
        // 時間の計算はmoment.jsを使えばもう少し楽になるよ!(Google Apps Script Advent Calendar 2012 5日目参照)
        Logger.log("イベント[%s] = %s", events[count].getTitle(), (event_end - event_start));
        allTime += ((event_end - event_start) / 1000);
      }
    }
    
    // ログに出力せず、Spreadsheetに出力すればもう少し見栄えが良いかも。
    // 今回は作業時間が割り出したかったのでLoggerにしています。
    Logger.log("イベント数 = %s, 全時間 = %s", targetCount, allTime / 3600);
  }
}

レシピ

カレンダーの取得(戻り値は配列
CalendarApp.getCalendarsByName(カレンダー名)
予定の取得(戻り値は配列
Calendar.getEvents(開始時間, 終了時間)
イベントタイトルの取得
CalendarEvent.getTitle()
イベントの開始時間の取得
CalendarEvent.getStartTime()
イベントの終了時間の取得
CalendarEvent.getEndTime()

JavaScriptのDateオブジェクトで差分の計算

実行結果

...たくさんのログ...

イベント数 = 88.0, 全時間 = 191.0

結論

赤字か?!

17
19
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
19

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?