あさの畑

プログラミングが好きな大学生のブログ。統計学や機械学習の勉強記録と、SIGNATE/Kaggle/AtCoderのお話。

【Google Apps Script】カレンダーからバイトの予定を取り出し、給料をスプレッドシートに出力した

今回は、「Google Apps Script」というものに手を出してみました。

 

はじめに

「Google Apps Script(GAS)」を使えば、Googleの様々なサービス(Gmail、Googleカレンダー、Googleマップ、スプレッドシートなど)を連携させて効率的に操ることができるそうです!「日常生活がめっちゃ便利になるんじゃね!?」と思い、面倒くさいことが大嫌いな僕はノリノリで始めちゃったわけです。

 

そして気になるテーマは「カレンダーからバイトの予定を取り出し、給料をスプレッドシートに出力する」というものです。

 

バイトのシフトや給料の管理は専用のアプリを使っている人も多いとは思います。しかし、予定をGoogleカレンダーで管理している僕としては、バイトもまとめて管理したいのです。そこで、Googleカレンダーでもバイトの管理が楽になるようにしたい!!!と思いました。

 

GASで作成するぞ

目標

「月に何時間働いたか、そして月の給料はいくらか」を毎月一覧でスプレッドシートに出力する。

 

Google Apps Scriptの始め方

まずはこちらの記事を参考に、スプレッドシートからGoogle Apps Scriptを使えるようにしました。

ascii.jp

 

おそらく、最初の承認の過程で多くの人がほんの一瞬だけつまづくと思うので、こちらのページで解決してください。僕も引っ掛かりましたが、すぐに解決するので大丈夫です。

tonari-it.com

 

作ってみる!

さあ、やってみよう!とは思ったのですが、さすがにJavaScriptのこと全く分かってないのはマズいと思い、さらっと勉強しました。

 

ドットインストールで動画を見ました。1時間ぐらいで基本的なことはわかります。

https://dotinstall.com/lessons/basic_javascript_v2

 

コードを書くとは言っても、そこまで長くはないし複雑でもないので、これを見ただけでも何とかなりました。

 

 

では、今度こそ始めます!

とりあえず、この記事を参考にしてカレンダーの予定をスプレッドシートに出力してみました。

tonari-it.com

 

そして、なんやかんや試行錯誤した結果、完成したコードがこちら!

 

function mySalary() {
 
  var mySheet=SpreadsheetApp.getActiveSheet(); //シートを取得
  var no=1;
 
  var myCal=CalendarApp.getCalendarById('Gmailアドレス');
 
  var date='2018/08/01 00:00:00'; //対象月
  var startDate=new Date(date); //取得開始日
  var endDate=new Date(date);
  endDate.setMonth(endDate.getMonth()+1); //取得終了日
 
  var myEvents=myCal.getEvents(startDate,endDate); //カレンダーの予定を取得
 
  /*予定を全てスプレッドシートに出力*/
  for each(var evt in myEvents){
    mySheet.appendRow([
        no,
        evt.getTitle(),
        evt.getStartTime(),
        evt.getEndTime(),
        "=(INDIRECT(\"RC[-1]\",FALSE)-INDIRECT(\"RC[-2]\",FALSE))*24" //所要時間(単位h)
      ]);
    no++;
  }
  
  job1 = [
    "バイト1", //カレンダーに登録しているバイト名
    "=SUMIFS(E:E,B:B,\"バイト1\")", //予定の中で「バイト1」の時間を合計
    "=(INDIRECT(\"RC[-1]\",FALSE))*1050" //時給をかけて月のお給料
  ];
  job2 = [
    "バイト2",
    "=SUMIFS(E:E,B:B,\"バイト2\")",
    "=(INDIRECT(\"RC[-1]\",FALSE))*900"
  ];
  
  /*スプレッドシートに出力*/
  insert_column = mySheet.getLastColumn() + 1
  for (var i = 0; i <= 2; i++){
    mySheet.getRange(1,insert_column+i).setValue(job1[i]);
    mySheet.getRange(2,insert_column+i).setValue(job2[i]);
  };
}

 

これを実行すると、このようになります。

左側に予定一覧が、右側にバイトごと(今回はバイト1、バイト2) の時間と給料が表示されます。

f:id:gadada:20180914122946p:plain

 

まとめ

今回は、Google Apps Scriptを使って、カレンダーからバイトの予定を取り出し、バイトの時間と給料をスプレッドシートに出力しました。Google Apps Scriptを始めるまでは難しそうで避けていたのですが、やってみると思っていたよりも始めやすくてびっくりしました!

 

ただ、「バイトの休憩時間」や「交通費」などは無視しているため、まだまだ使い物にはならないなと思います。また、実行の作業も毎月自動で行ってくれるようにしないと面倒なので、そこも課題です。

 

まだまだ、改善すべきところだらけですが、一応「Google Apps Scriptを使ってみた」ということで記事にまとめました~!