【Google Apps Script】Googleカレンダーから月間の稼働時間を集計する
こんにちは、maricuruのワダ(@takahi5)です。
今回はGoogle Apps Scriptネタです。
社内のグループウェアとしてG Suiteを使ってる会社は多いのではないでしょうか。
Google App Scriptを使うと、スプレッドシートやGoogleカレンダーをプログラムで操作できるので、定形作業を自動化したりできます。
手間のかかる事務作業を自動化するツールとか作るとメチャメチャ喜ばれますw
もちろん社員の労働効率もあがるので、会社としてもバンザイです。
解決したい課題
弊社では柔軟な働き方を推奨していて、子育て中のママさんが自宅でスキマ時間に作業をしてたりします。
また東京近郊だけでなく、関西で働いているスタッフもいます。
それらのメンバーの勤務時間は、Googleカレンダーに本人が入力する形で管理しています。
そして給与計算の際には、経理担当がGoogleカレンダーを手作業で数えています。
そこで、この手作業で数える作業をなんとかできないのか!?
というのが今回解決したい課題でした。
カレンダーを集計して稼働時間を出力する
そこで、この経理担当が人力でやってる作業をGoogle Apps Scriptを使って自動化しました。
いきなりコード全文です!
(実際の業務で使ってるのではなく簡潔にしたサンプルです)
要件はこんな感じです
- 指定した複数のユーザーをまとめて取得
- 特定タイトルの予定だけに絞って集計
- 合計の稼働時間をサマリして表示
なげえ、、、
ではポイントを要約して解説します。
カレンダーの読み込み
var calendar = CalendarApp.getCalendarById('yamamoto@gmail.com');
のようにしてyamamoto@gmail.com
のカレンダーを取得できます。
このときスクリプトの実行者はyamamoto@gmail.com
のカレンダーを共有されている必要があります。
var events = calendar.getEvents(startDate,endDate);
で対象期間のカレンダーイベントたちを取得します。
for each(var evt in events){ var title = evt.getTitle(); var startTIme = evt.getStartTime(); var endTIme = evt.getEndTime(); }
それをfor
で回して各種情報を取得できます。
title, startTime...その他にも各種情報を取得できます。詳しくはコチラ↓
Class CalendarEvent | Apps Script | Google Developers
集計する
このサンプルでは、
evt.getTitle();
したものをチェックし、カレンダーの中から特定の予定名に絞っています。
また
evt.getEndTime() - evt.getStartTime()
の差分で稼働時間を計算しています。
スプレッドシートに結果を出力
var id = SpreadsheetApp.create('スプレッドシート名').getId(); var spreadsheet = SpreadsheetApp.openById(id);
のようにしてspreadsheetインスタンスを取得できます。
var sheet = spreadsheet.insertSheet('summary');
でsummary
という名前のシートを挿入し、sheet
インスタンスを取得します。
つぎに配列形式で持っているデータをガサっとsheetに書き込みます。
var array = [ ['2018-10-26 9:00', '2018-10-26 14:00', '5', 'データ入力', 'yamamoto@gmail.com' ], ['2018-10-28 9:00', '2018-10-28 15:00', '6', 'データ入力', 'yamamoto@gmail.com' ], ['2018-10-29 9:00', '2018-10-29 14:00', '5', '文章校正', 'yamamoto@gmail.com' ] ]
のような配列があったとすると
var rows = array.length; var cols = array[0].length; sheet.getRange(1,1,rows,cols).setValues(array);
これ一発で、この配列データががSheetに挿入されます。
まとめ
以上になります!
Google Apps Script用に覚えることは少しありますが、JavaScriptで書けるのはいいですね!
何かの参考になれば幸いです!