【幹事必見!】スプレッドシートの入力が完了したらチャットワークに自動で通知する方法

messenger

photo credit: Red Bull – Geared Up – Yokohama via photopin (license)

みなさん、こんにちは!
すっかりGoogle Apps Scriptとチャットワークがオモチャと化していますタカハシ(@ntakahashi0505)です。

引き続きGoogle Apps Scriptを使ってチャットワークに色々な通知を送る方法について研究をしています。

前回はこちらの記事で

Google Apps ScriptでTwitterの検索結果を自動でチャットワークに通知
Google Apps Scriptを使ってTwitterのエゴサーチ結果をチャットワークに通知する方法を紹介していきます。IFTTTとスプレッドシートを活用し初心者でもわかりやすい方法です。

Twitterの特定のキーワードによる検索結果をチャットワークに送信する方法についてお伝えしました。

さて、ちょっと早いですが、そろそろ忘年会シーズンですね。

幹事さんは、関係者からの予定をヒアリングしてメンバー全員が(もしくはできるだけ多くのメンバーが)参加できる日程を調整したり、意見をまとめたり、なかなか大変です。

その際に、チャットワークとGoogleスプレッドシートの組み合わせが、幹事さんの超強力な助っ人ツールとなります。

チャットワークが爽快すぎ!すぐ使えるショートカットキー&裏ワザ6選
多くの企業が導入しているクラウド型チャットサービスであるチャットワーク。導入するだけでもだいぶお仕事がはかどるのですが、もっとストレスフリーにそして効率がアップするショートカットや裏ワザがたくさんあるのをご存知でしたか?今回はその中でもオス...

ですが、さらに全員がスケジュールを入力し終わったことが自動で通知されたら便利ではないですか?

飲み会以外にも使えるシチュエーションはあるかと思いますが、今回は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行目ですね。

まず、現在のスプレッドシート自体をオブジェクトとして取得する場合は

Spreadsheetオブジェクト=SpreadsheetApp.getActiveSpreadsheet()

とします。

また、スプレッドシートオブジェクトの名前、URLを取得する場合はそれぞれ

Spreadsheetオブジェクト.getName()
Spreadsheetオブジェクト.getUrl()

とします。

わかりやすいですね。

注意点としては、スプレッドシートオブジェクトと、シートオブジェクトは別ものということです。

スプレッドシートオブジェクトのほうが上位のオブジェクトでして、スプレッドシートの配下にシートオブジェクトが1つまたは複数配置されているというイメージになります。

特定の範囲の最終の列番号を取得する

これは上記スクリプトの6行目が該当していますが、こちらの記事

Google Apps Scriptでチャットワークの名言botを作る方法
初心者向けGoogle Apps Scriptでチャットワークを操作するシリーズです。今回はスプレッドシートの操作、イベントトリガーなどの設定を利用してチャットワークのbotを作る方法についてです。

が参考になります。

特定の範囲の最終列の列番号取得する場合は

Rangeオブジェクト.getLastRow()

を使います。

Sheetオブジェクト.getDataRange()でそのシートのデータがある範囲を取得しますので、その範囲の最終列の列番号を取得するということになります。

今回の例ですと、M列が該当しますので、maxColumnには「13」が格納されます。

breakでfor繰り返しから抜ける

for文を抜ける命令として

break

があります。本スクリプトの場合、なくても動作はするのですが、一つでも入力がされていないセルを見つけたらその時点で入力は完了していないわけですから、以降の繰り返し処理をする必要がありません。

今回はforが入れ子になっていますので、ラベルLを使って

ラベル:for(条件文){
//処理
break ラベル;
}

とすることで、ラベルが付与されている方つまり外側のforループから抜けるようにしています。

イベントトリガーをスプレッドシートの編集時に設定

Google Apps Scriptの優れている点として、自動でスクリプトを起動させられるという点が挙げられます。

これまでのシリーズでは、一定時間で起動するとうパターンを活用してきましたが、今回はスプレッドシートの編集時にトリガーを設定します。

まず、スクリプトエディタのメニューから「リソース」→「現在のプロジェクトのトリガー」を選択します。

Google Apps Scriptの現在のプロジェクトのイベントトリガーを設定

「現在のプロジェクトのトリガー」ウィンドウで、イベントを「スプレッドシートから」「編集時」に設定して「保存」でOKです。

Google Apps Scriptのイベントトリガーをスプレッドシートの編集時に設定

ちなみに、「値の変更」を選びたくなりますが、スプレッドシートのセルの値の編集であれば常に「編集」を選んでおいてOKです。

本件に関して、詳しくはこちらの記事にまとめられているので、興味がある方はご覧ください。

Google Spreadsheetのトリガーの「編集時」と「値の変更」の違いを検証してみた - まだ中学生のブログ
Google Spreadsheetのトリガーの種類の検証 調査対象のトリガー トリガーの種類は次のとおりです。 スプレッドシートから 起動時 編集時 値の変更 フォーム送信時 時間主導型 特定の日時 分タイマー 時タイマー 日タイマー 週...

チャットワークへの自動通知結果

これにて完成となります。

晴れてスプレッドシートの対象範囲が全て埋まりましたら

チャットワークへのスプレッドシート入力完了通知

このように、チャットワークに自動で通知されます。

スプレッドシートのURLも貼っていますから、「プレビュー」ですぐさま内容の確認もできますね。

補足:次回、別の飲み会で使いたいときはどうするの?

次回、別の飲み会の幹事をやるときですが、今回のスクリプトを簡単に流用できます。

Googleドライブでスプレッドシートをコピーするだけで流用することができます。

スプレッドシートに紐づいているスクリプトもコピーされますし、スクリプト内に呼び出しているチャットワークのライブラリもそのまま使用できる状態でコピーされます。

スプレッドシートの名前と表の作りだけ変更をすればOKというわけですね。

使い回しも問題なしです!

まとめ

以上、Google Apps Scriptでスプレッドシートの入力完了をチャットワークに自動で通知する方法についてお伝えしました。

今回のスクリプトですが、もちろん飲み会の準備以外にも活用できそうですね。

次回はスプレッドシートのリストアップ件数の通知をしてみます。

スプレッドシートのリストアップ件数をGASでチャットワークに通知する
スプレッドシートで作成したリストの件数をGoogle Apps Scriptを使ってチャットワークに通知する方法です。チームで何らかのリストを作成するという共同作業をしているときなどに便利ですよ。

どうぞお楽しみに!

連載目次:初めてのGoogle Apps Scriptで自動でチャットワークに色々と送る

最初のお題にも限らずチャットワークを中心に操作していきます。スプレッドシートやカレンダーをはじめとするGoogleサービスはもちろん、Twitterなどの外部のサービスともAPIで連携させて色々なものをチャットワークに通知してみますよ。
  1. Google Apps Scriptの第一歩、初心者でもチャットワークにメッセージを送れる
  2. Google Apps Scriptでチャットワークの名言botを作る方法
  3. Google Apps ScriptでTwitterの検索結果を自動でチャットワークに通知
  4. 【幹事必見!】スプレッドシートの入力が完了したらチャットワークに自動で通知する方法
  5. スプレッドシートのリストアップ件数をGASでチャットワークに通知する
  6. GASでチャットワークにGoogleアナリティクスの前日レポートを自動送信
  7. GASでGoogleアナリティクスの記事ランキングをチャットワークに送る
  8. Google Apps ScriptでWordPressの更新情報をチャットワークに送る
  9. 毎朝、当日の予定をGoogleカレンダーから取得してチャットワークに送る
  10. 【Google Apps Script】天気予報をWeb APIで取得する方法
  11. 【GAS】JSON形式のデータを取り出してチャットワークに天気予報を送る
タイトルとURLをコピーしました