見出し画像

【GAS】スプレッドシートから特定列のセルを取得し、現在日時と一致したセルがあった場合にSlackへとメッセージをPOSTする。

こんにちは、七瀬カイ(@7se_kai)です。

今回のnoteでは、タイトルの通り「任意のスプレッドシートから特定列を最終行まで取得して、一致した日付があれば隣のセルの情報を取得してSlackにIncoming Webhookを利用してPOSTする」Google Apps Scriptの作成方法を共有します。

このnoteでは、基本的な設定方法のみを書いてあります。
コードの詳しい解説を見たかったり、細かくカスタマイズしたい場合は、以下のブログ記事からご確認ください。

早速ですが、以下がコードの全文となります。

コード全文

function CleanInCharge() {
  var date = new Date();
  var y_date = date.getFullYear();
  var m_date = ('0' + (date.getMonth() + 1)).slice(-2);
  var d_date = ('0' + (date.getDate())).slice(-2);
  var date = y_date + "年" + m_date + "月" + d_date + "日";

  var sheet = SpreadsheetApp.openById('スプレッドシートのID'); var ss = sheet.getSheets()[0];
  var POSTURL = 'Incoming WebHooksで発行されたURL'

  const lastRow = ss.getLastRow();

  for(let i = 4; i<= lastRow; i++) {
    var range = ss.getRange(i, 3);
    var range2 = ss.getRange(i, 2);
    var today = range.getDisplayValue();
    var person = range2.getValue();
    if(today === date) {
      var message = '今週の当番は' + person + 'さんです。';
      var jsonData = {
        'text':message
      };
      var payload = JSON.stringify(jsonData);
      var options = {
        'method':'post',
        'contentType':'application/json',
        'payload':payload
      };
      UrlFetchApp.fetch(POSTURL, options);
    }
  }
}

トリガーの設定について

週初めの始業後1時間以内に通知したいので、毎日9:00-10:00の間に1度実行するようにトリガーを設定しています。
毎週月曜日ではなく毎日起動にしている理由としては、月曜日が祝日で火曜日に通知したい場合にも対応するためです。

まとめ

よく分からない箇所がある場合や、実際にカスタマイズしても動作しなかった場合にはコメントやお問い合わせをいただければ、回答させていただきます。

Twitter(@7se_kai)で直接質問をいただいても大丈夫ですので、ぜひ、フォローもしていただければと思います。


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