見出し画像

【Google Apps Script 通信 vol.9】スクリプトが完了したらSlack通知しよう!

こんにちは。きゅうりです。

前回やったこと

複数シートに対して、数式を一括コピーできるようになりましたね!

やること

データ数が多くなるとスクリプト実行時間(=待ち時間)が長くなるので、

スクリプトが完了したらSlackに通知してくれるように進化させましょう!

こんな感じで通知が来るイメージです。

無題

Slack通知するための事前準備|WebhookURLを取得

①下記リンクにアクセス

②通知したいチャンネルを検索してWebhookURLを取得(この後のスクリプトに入れるので、コピーしておいてください)

無題

無題

これで準備完了です!

Slack通知のサンプルコード

冒頭の4か所だけ自分用に書き換えて使っていただく必要があります。

それ以外はコピペでOKです!

function sendSlack() {

 // 下記4点を自分用に書き換えてください!

 // Slackの通知チャンネルをWebhookURLで指定
 var postUrl = '★WebhookURLを記載'
 var username = '★SlackBotの名前を記載'
 var iconurl = '★SlackBotのアイコンURLを記載';
 var message = '★通知したいメッセージを記載'
 
 // これ以降は編集しなくても使えます!(先ほど宣言した変数を差し込んでいます)

 // 送信内容の詳細設定
 var jsonData ={
   "username" : username,
   "icon_url" :iconurl,
   "link_names" : 1,
   "attachments":[
     {
        "fallback":"スクリプト実行の完了通知",
        "color":"good",
        "fields":[
           {
              "value":message
           }]}]};
 
 // パラメータをJSONに変換
 var payload = JSON.stringify(jsonData);

 // POSTオプションの設定
 var options =
 {
   "method" : "post",
   "contentType" : "application/json",
   "payload" : payload,
 };

 // リクエスト
 UrlFetchApp.fetch(postUrl, options); 
}

これでsendSlack()という関数が完成しました!指定したチャンネルにメッセージ送信できるか、スクリプトを実行してテストしてみましょう。

また、もう少し詳しい解説が気になるかたは下記リンクなどを見てみると良いと思います(*'▽')(ちょっと雑感があるのは私が完璧には理解していないから、、、)

スクリプト完了したらSlack通知が飛ぶように設定

先ほどsendSlack()という関数でSlack通知できるようになりましたね。

ここまで来たら、完了したら通知を飛ばしたいスクリプトの最下部にsendSlack()を差し込むだけです。

function myFunction() {

~完了したら通知を飛ばしたいスクリプト~

sendSlack();

}

前回のスクリプトに差し込むと・・・

function Copyformula() {

 // シート情報を取得
 var ss = SpreadsheetApp.getActiveSpreadsheet();
 var setSheet = ss.getSheetByName('指示');  
 
 // A列の最終行を取得(コピー対象のシート情報を取得)
 var sheetLastRow = setSheet.getRange(1, 1).getNextDataCell(SpreadsheetApp.Direction.DOWN).getRow();

 // シート数分 繰り返し
 for (var i = 2; i <= sheetLastRow; i++){
 
   // コピーを実行するシートを取得
   var copySheetName = setSheet.getRange('A'+i).getValue();
   var copySheet = ss.getSheetByName(copySheetName);
     
   //  B列の最終行を取得(数式コピーの繰り返し回数を取得)
   var loop = setSheet.getRange(1, 2).getNextDataCell(SpreadsheetApp.Direction.DOWN).getRow();

   // コピーを実行するシートの最終行を取得
   var copyLastrow = copySheet.getLastRow();
 
   // コピー列数分 繰り返し
   for (var j = 2; j <= loop; j++){ 
 
     // コピー対象列を取得(コピー対象列の情報が2行目以降のためiは2からスタート)
     var copyCol = setSheet.getRange('B'+j).getValue();
       
     // 2行目の数式を最終行までコピー
     copySheet.getRange(copyCol+'2').copyTo(copySheet.getRange(copyCol+'3:'+copyCol+copyLastrow));
}}

 // Slackに完了通知
 sendSlack();

}

これでSlack通知されるようになりました!週明け使ってみたら感想も追記します。(たぶん)

本当はCSVインポートもGASで実行したい。。。

数式を入れるということは、元となるデータをスプレッドシートに貼り付ける必要がありますよね。

本当はここも手動でぺたぺた貼りたくないので自動化したい。(データが大きくて、貼り付けの待ち時間が長くなったら嫌だ)

コード紹介している記事も見つけたものの、すんなり理解はできなさそう。。。ということで、まずはここまでにしています。手動ぺたぺたが無理そうだったら、インポート自動化も頑張ります!



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