みなさん、こんにちは!
すっかりGoogle Apps Scriptとチャットワークがオモチャと化していますタカハシ(@ntakahashi0505)です。
引き続きGoogle Apps Scriptを使ってチャットワークに色々な通知を送る方法について研究をしています。
前回はこちらの記事で
Twitterの特定のキーワードによる検索結果をチャットワークに送信する方法についてお伝えしました。
さて、ちょっと早いですが、そろそろ忘年会シーズンですね。
幹事さんは、関係者からの予定をヒアリングしてメンバー全員が(もしくはできるだけ多くのメンバーが)参加できる日程を調整したり、意見をまとめたり、なかなか大変です。
その際に、チャットワークとGoogleスプレッドシートの組み合わせが、幹事さんの超強力な助っ人ツールとなります。
ですが、さらに全員がスケジュールを入力し終わったことが自動で通知されたら便利ではないですか?
飲み会以外にも使えるシチュエーションはあるかと思いますが、今回はGoogle Apps Scriptでスプレッドシートの入力完了をチャットワークに自動で通知する方法をお伝えします。
では、よろしくお願いします!
チャットワークとスプレッドシートの組み合わせが超秀逸な件
まず、幹事さんとして以下のようなスプレッドシートを作成したとします。
各日程について、各メンバーが○か×かでスケジュールの可否を入力していくというものです。
で、幹事さんはこれをチャットワークを使って、「皆さん入力してね~」という依頼をします。場合によっては、全員に期限付きのタスクを立てても良いですね。
チャットワーク&Googleスプレッドシートのいいところは、このスプレッドシートのURLの隣にある「プレビュー」をクリックすることで
チャットワーク上で直接スプレッドシートを編集できるというところです。
このコラボレーション、超秀逸です。
スプレッドシートの入力完了をチャットワークに自動通知する
さて、今回はこのスプレッドシートの入力が全て完了したことを幹事さんのマイチャットに自動通知をする、ということを目標にGoogle Apps Scriptを組んでいきます。
まず、おおまかな方針をまとめてみます。
- スクリプトを起動するイベントトリガーを「スプレッドシートの編集時」にする
- スクリプトはスプレッドシートの範囲内の全てのセルに値が入力されているかをチェック
- 範囲内の全てのセルに入力がされていればチャットワークにメッセージを送る
では、この方針に沿って作業を進めてきます。
入力完了を通知するスクリプト
先にスクリプトを組んでしまいますと、こちらになります。
function inputCheck() { var mySs=SpreadsheetApp.getActiveSpreadsheet(); //スプレッドシートを取得 var mySheet=SpreadsheetApp.getActiveSheet(); //シートを取得 var maxRow=mySheet.getDataRange().getLastRow(); //シートの使用範囲のうち最終行を取得 var maxColumn=mySheet.getDataRange().getLastColumn(); //シートの使用範囲のうち最終列を取得 var inputFlag=1; //入力が全て完了している=1/完了していない=0 /* スプレッドシートの入力が完了しているかをチェック */ L:for(var i=3;i<=maxRow;i++){ for(var j=2;j<=maxColumn;j++){ if(mySheet.getRange(i,j).getValue()==""){ inputFlag=0; break L; } } } //inputFlagが1のままであれば実行 if(inputFlag==1){ /* 送るメッセージを生成 */ var strBody = "[info][title]スプレッドシート入力完了[/title]" + mySs.getName() + "n" + mySs.getUrl() + "n[/info]" /* チャットワークにメッセージを送る */ var cwClient = ChatWorkClient.factory({token: '------------------------'}); //チャットワークAPI cwClient.sendMessage({ room_id:XXXXXXXX, //ルームID body:strBody }); } }
ちょっと長いですが、今までのシリーズで使ったことを大活用しています。少しだけ新しい内容が入っているだけです。
forループで範囲内のセルを全てチェックして、一つでも未入力のセルがあればinputFlagを0にしてループを抜けます。
inputFlagが1のままであれば、チャットワークに送る用の文字列を整形して送信するという形です。
以下、新しく出てきた内容について解説をしますね。
スプレッドシートを取得して名前やURLを利用する
まず、このスプレッドシート自体をオブジェクトとして取得すること、またスプレッドシートの名前やURLを取得する方法についてお伝えします。
上記プログラムでは3,25,26行目ですね。
まず、現在のスプレッドシート自体をオブジェクトとして取得する場合は
とします。
また、スプレッドシートオブジェクトの名前、URLを取得する場合はそれぞれ
Spreadsheetオブジェクト.getUrl()
とします。
わかりやすいですね。
注意点としては、スプレッドシートオブジェクトと、シートオブジェクトは別ものということです。
スプレッドシートオブジェクトのほうが上位のオブジェクトでして、スプレッドシートの配下にシートオブジェクトが1つまたは複数配置されているというイメージになります。
特定の範囲の最終の列番号を取得する
これは上記スクリプトの6行目が該当していますが、こちらの記事
が参考になります。
特定の範囲の最終列の列番号取得する場合は
を使います。
Sheetオブジェクト.getDataRange()でそのシートのデータがある範囲を取得しますので、その範囲の最終列の列番号を取得するということになります。
今回の例ですと、M列が該当しますので、maxColumnには「13」が格納されます。
breakでfor繰り返しから抜ける
for文を抜ける命令として
があります。本スクリプトの場合、なくても動作はするのですが、一つでも入力がされていないセルを見つけたらその時点で入力は完了していないわけですから、以降の繰り返し処理をする必要がありません。
今回はforが入れ子になっていますので、ラベルLを使って
//処理
break ラベル;
}
とすることで、ラベルが付与されている方つまり外側のforループから抜けるようにしています。
イベントトリガーをスプレッドシートの編集時に設定
Google Apps Scriptの優れている点として、自動でスクリプトを起動させられるという点が挙げられます。
これまでのシリーズでは、一定時間で起動するとうパターンを活用してきましたが、今回はスプレッドシートの編集時にトリガーを設定します。
まず、スクリプトエディタのメニューから「リソース」→「現在のプロジェクトのトリガー」を選択します。
「現在のプロジェクトのトリガー」ウィンドウで、イベントを「スプレッドシートから」「編集時」に設定して「保存」でOKです。
ちなみに、「値の変更」を選びたくなりますが、スプレッドシートのセルの値の編集であれば常に「編集」を選んでおいてOKです。
本件に関して、詳しくはこちらの記事にまとめられているので、興味がある方はご覧ください。
チャットワークへの自動通知結果
これにて完成となります。
晴れてスプレッドシートの対象範囲が全て埋まりましたら
このように、チャットワークに自動で通知されます。
スプレッドシートのURLも貼っていますから、「プレビュー」ですぐさま内容の確認もできますね。
補足:次回、別の飲み会で使いたいときはどうするの?
次回、別の飲み会の幹事をやるときですが、今回のスクリプトを簡単に流用できます。
Googleドライブでスプレッドシートをコピーするだけで流用することができます。
スプレッドシートに紐づいているスクリプトもコピーされますし、スクリプト内に呼び出しているチャットワークのライブラリもそのまま使用できる状態でコピーされます。
スプレッドシートの名前と表の作りだけ変更をすればOKというわけですね。
使い回しも問題なしです!
まとめ
以上、Google Apps Scriptでスプレッドシートの入力完了をチャットワークに自動で通知する方法についてお伝えしました。
今回のスクリプトですが、もちろん飲み会の準備以外にも活用できそうですね。
次回はスプレッドシートのリストアップ件数の通知をしてみます。
どうぞお楽しみに!
連載目次:初めてのGoogle Apps Scriptで自動でチャットワークに色々と送る
最初のお題にも限らずチャットワークを中心に操作していきます。スプレッドシートやカレンダーをはじめとするGoogleサービスはもちろん、Twitterなどの外部のサービスともAPIで連携させて色々なものをチャットワークに通知してみますよ。- Google Apps Scriptの第一歩、初心者でもチャットワークにメッセージを送れる
- Google Apps Scriptでチャットワークの名言botを作る方法
- Google Apps ScriptでTwitterの検索結果を自動でチャットワークに通知
- 【幹事必見!】スプレッドシートの入力が完了したらチャットワークに自動で通知する方法
- スプレッドシートのリストアップ件数をGASでチャットワークに通知する
- GASでチャットワークにGoogleアナリティクスの前日レポートを自動送信
- GASでGoogleアナリティクスの記事ランキングをチャットワークに送る
- Google Apps ScriptでWordPressの更新情報をチャットワークに送る
- 毎朝、当日の予定をGoogleカレンダーから取得してチャットワークに送る
- 【Google Apps Script】天気予報をWeb APIで取得する方法
- 【GAS】JSON形式のデータを取り出してチャットワークに天気予報を送る