見出し画像

【GAS】Google Apps ScriptでTo Doリストの未対応の項目をカウントして、HangOut Chatで通知する。

前回の記事に書いた通り、未対応項目が何件あるかをHangOutチャットに通知する事が出来て上司に見せたところ......

「ふーん、悪くないね。でもさ、未対応項目が何件あるかよりも未対応項目が何かを知りたいんだよね。」

このスクリプト書くのだって結構難しいんだぞ、お前やってみろと言いたくなったものの、今回ばかりは、「あっ.....確かに。」と思わざるを得なかった。

無いのならば、作ろう!!

スクリーンショット 2019-11-09 17.12.54

function contactToStaff() {
 
 var spreadSheet = SpreadsheetApp.getActiveSpreadsheet();
 var sheet       = spreadSheet.getSheetByName('ALL_DATA');
 var values      = sheet.getDataRange().getValues();
 
 var url         = spreadSheet.getUrl();
 var sheetId     = sheet.getSheetId();
 var marge       = url + "#gid=" + sheetId;
 var sheetName   =sheet.getSheetName();
 
 var today = new Date();
 today = Utilities.formatDate(today, 'JST', 'yyyy/MM/dd');
 
 //カウント用の変数
 var done     = 0;
 var doing    = 0;
 var undone   = 0;
 
 var details  = '';
 var details2 = '';
 
 
 for (var i = 0; i < values.length; i++){
   var staffName     = values[i][3];//スタッフ
   var shareHouse    = values[i][4];//シェアハウス
   var status        = values[i][10];//スタッフへの連絡ステータス
   
   //Logger.log('values[%s][3]: %s', i, values[i][3]);
   //Logger.log('values[%s][6]: %s', i, values[i][6]);
   //Logger.log('values[%s][8]: %s', i, values[i][10]);
   
   if(status === '完了'){
     done += 1;
   }
   if(status === '対応中・連絡待ち'){
     doing += 1;
     details += staffName + ': ' + shareHouse + '\n';
   }
   
   if (status === '未対応') { 
     undone += 1;
     details2 += staffName + ': ' + shareHouse + '\n';
   }
 }
 //Logger.log('未対応:%s件, 詳細:%s', undone, details);
 var message  = '【スタッフへの連絡】'+'\n\n'+ today +' 現在'+'\n' + '未対応' +  ' ' +  undone + ' 件' + '\n' + '対応中・連絡待ち' + ' ' + doing +' 件'  + '\n'+ '完了' + ' ' + done +' 件'+ '\n\n' +
   '*【未対応のスタッフ】*'+ '\n' + details2 + '\n' + '*【対応中・連絡待ちのスタッフ】*' +'\n'+ details +'\n\n';
 
 Logger.log(message);
 
 //メッセージとスプレッドシートのURLを合体
 message += marge;
 
 
 //HangOutChatに情報を飛ばすための設定
 var webhook = '*******************';
 var text = message;
 
 var payload = {
   "text" : text
 }
 
 var json = JSON.stringify(payload);//エンコード
 
 var options = {
   "method" : "POST",
   "contentType" : 'application/json; charset=utf-8',
   "payload" : json
 }
 
 var response = UrlFetchApp.fetch(webhook, options);
 
}
for (var i = 0; i < values.length; i++){
   var staffName     = values[i][3];//スタッフ
   var shareHouse    = values[i][4];//シェアハウス
   var status        = values[i][10];//スタッフへの連絡ステータス

配列はゼロから始まるので、それぞれ、4列目(D列)スタッフ名、5列目(E列)シェアハウス(※部署とか都合に応じて書き換えてください。)11列目(I列)ステータス。こちらは、データの入力規則で、完了、未対応、対応中・連絡済みの3つのステータスがあります。

//カウント用の変数
 var done     = 0;
 var doing    = 0;
 var undone   = 0;
 
 var details  = '';
 var details2 = '';


  if(status === '完了'){
     done += 1;
   }
   if(status === '対応中・連絡待ち'){
     doing += 1;
     details += staffName + ': ' + shareHouse + '\n';
   }
   
   if (status === '未対応') { 
     undone += 1;
     details2 += staffName + ': ' + shareHouse + '\n';
   }

空っぽの変数を用意して、ステータスが完了、対応中、未対応のいずれかだったら、変数をプラス1していきます。それをfor文で最終行まで繰り返します。detailsにはスタッフ名と、所属が代入され、どのスタッフへの連絡が未対応、あるいは対応中なのかが分かります。

スクリーンショット 2019-11-09 17.11.38

こんな感じのメッセージに、最終行にスプレッドシートのリンクが貼られて定期的に飛んでくれば、とても便利です。シートを探す手間がゼロになるし、チーム全体で取り組むべきこと、部下が何をやっているのか把握するためにこういったスクリプトを非常に有効かなと思いました。

あとはシートを使ってくれるかを祈るだけ。いくら素晴らしいスクリプトを書いてもつかってくれなくちゃ意味が無いですからね。

この記事が気に入ったらサポートをしてみませんか?