見出し画像

【GAS】Google Apps Script 活用事例 値が変更されたら、変更内容をHangOut Chatに送信するスクリプト

実務で退職者の備品回収業務を行なっている際、セルの値が変更になったら、どう変わったのかを通知して欲しいと思う事がありました。貸与した制服、保険証の回収や、スタッフの退職申請の対応状況などです。変更履歴を見れば、分かるものの面倒なので、それを叶えてくれるスクリプトを作ってみました。

こういう仕組みを取り入れていると、マネージャー、管理する人の追いかけ業務がほぼゼロになるメリットがあるので本当は、管理職の人に、こういうの書けると便利ですよ!!って伝えたいですね。

完成形のスクリプト

//編集されたセルを通知
function toDoCheckList(){
 var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
 var targetSheet = spreadsheet.getSheetByName('シート1');
 var activeSheet = spreadsheet.getActiveSheet();
 
 Logger.log('指定したシート:%s', targetSheet.getSheetName());
 Logger.log('アクティブなシート:%s',activeSheet.getSheetName());
 
 //シートを添付するための記述
 var url     = spreadsheet.getUrl();
 var sheetId = targetSheet.getSheetId();
 var marge   = url + "#gid=" + sheetId;
 
 //日付の表示形式を整形する
 var today = new Date();
 today = Utilities.formatDate(today, 'JST', 'yyyy/MM/dd');
 
 //tragetSheetとactiveSheetが同じであれば、E列編集時にメッセージが表示される。
 if (targetSheet.getSheetName() === activeSheet.getSheetName()){
   
   var activeCell      = targetSheet.getActiveCell();
   var retirementStaff = activeSheet.getRange(1,activeCell.getColumn()).getValue();
   var person          = activeSheet.getRange(activeCell.getRow(),4).getValue();//担当者
   var itemList        = activeSheet.getRange(activeCell.getRow(),3).getValue();//項目名
   var message         = today +' '+ retirementStaff +' さんの、'+'\n'+ itemList +' ' + 'の対応状況が、'+'\n' +
                         person +' ' + 'さんによって、'+' ' + activeCell.getValue() + ' ' + 'に変更されました。' +'\n\n';
     
     //2019/10/30 スタッフA さんの、ジョブカン・アカウント作成 の対応状況が、鈴木 さんによって、 緊急度;高 に変更されました。
     Logger.log('アクティブセル:%s', activeCell.getA1Notation());
   
   
   //5列以降の各セル内容が変更されたときに通知する。(A列が1)
   if(activeCell.getColumn()>=5){
     Browser.msgBox(message);
     
   }
   //ステータスが緊急度:高に変わった時のみ、HangOut Chatで通知する。
   if(activeCell.getValue() ==='緊急度:高'){
     
     var webhook ='**************';
     message += marge;
     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);
     
   }
 }
}

このスクリプトのユニークな所は、2つの方法でシートの取得を行なっている所です。どういう経緯で、このスクリプトが書かれたかは、忘れてしまいましたが、#ノンプロ研で頂いたヒントを元に作成しました。今まさに編集されている箇所を取得し、それをアラート画面と、チャットのダブルで知らせてくれるものです。

完了になる度に通知されるとウザかったので、ステータスが緊急度:高になったときだけ通知されるように設定しました。

if(activeCell.getColumn()>=5){
     Browser.msgBox(message);
     
   }

getColumnなんて、多分めったに使わないんじゃないかな。編集されたセルが34行目だったら、F34のように返してくれます。

if(activeCell.getValue() ==='緊急度:高'){......}

'緊急度:高'の部分を、別の何かに変えてみても面白いかもしれません。

社内チャットツール戦争に負けてしまった話

2020/01/25 追記:この記事を書いた頃は、社内のチャットツールが何にするか決めあぐねている状態でした。正式にSlackになり、Chatは、凍結されることになってしまいました。なので、Slack関連の記事が今後増えると思います。


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