スプレッドシートの日付の列が今日だったら必要な列の情報を拾ってSlackに送る


スプレッドシートのデータをSlackに通知する処理を書いたのでメモです。このようなスプレッドシートがあったとして、日付が今日だったらその行の項目1と項目3の内容をSlackに送ってみます。スケジュールに仕掛けておくことで毎朝Slackに通知することもできます。


(日付は順序よく並んでいなくてもよい。途中に空欄があっても大丈夫。)

ツール -> スクリプトエディタ を開いてスクリプトファイルを登録する。

スクリプトファイル コピペ用("//編集"はそれぞれの環境で編集が必要)

function checkCell() {
    // スプレッドシートを指定(URLからコピペする)
    var spreadsheet = SpreadsheetApp.openById('xxxxxxxxxxxxx') //編集
    //シートの名前を指定する
    var sheet = spreadsheet.getSheetByName('管理表1'); //編集

    //今日の日時を取得する
    var today = new Date()
    //console.log(today); //Sat Jun 20 2020 01:14:58 GMT+0900 (日本標準時)

    var string = "";

        //必要な列のデータを配列で取得していく。getValues()を使って配列でvaluesXに入れる。
        //日付の列を取得する。
        var rangeA = sheet.getRange("A:A");
        var valuesA = rangeA.getValues();

        //項目1の列
        var rangeB = sheet.getRange("B:B");
        var valuesB = rangeB.getValues();

        //項目3の列
        var rangeD = sheet.getRange("D:D");
        var valuesD = rangeD.getValues();

    //valuesA[1][0]やvaluesA[2][0]にデータが入っているのでforをネストさせている
    for (var i = 0; i < valuesA.length; i++) {
        var date = "";
        for (var j = 0; j < valuesA[i].length; j++) {
            date = valuesA[i][j];

              //MomentjsのisSameで日付が同じかどうか(今日かどうか)を判定。日付が今日ならstringに代入する。
              if ( Moment.moment(today).isSame(date,'day')) {
                string = string + ('\n') + " 項目1は " + valuesB[i][j] + "です。" + " 項目3は " + valuesD[i][j] + "です。"; //編集
              }
            }
        }
    //stringが空だったら何もしないで終わる。
    if ( !string ) {
    return ;
    }
    //stringに何か入っていたらSlackに送信する関数を実行する。
      sendSlackMessage(string);
  }

  // Slackへ送信するfunction
  function sendSlackMessage(message) {

    var postUrl = 'https://hooks.slack.com/services/xxx/xxx/xxxxxxxx' //編集

    var jsonData =
    {
       "text" : "*今日の予定*" + message //編集
    };
    var payload = JSON.stringify(jsonData);
    var options =
    {
      "method" : "post",
      "contentType" : "application/json",
      "payload" : payload
    };
    UrlFetchApp.fetch(postUrl, options);
  }

SpreadsheetApp.openByIdに入れたIDはURLのマスクしている部分

日付の処理を扱うライブラリMoment.jsを使ったのでインストールする。ここを参考にしました。
https://tonari-it.com/gas-moment-js-moment/

リソース -> ライブラリ

スクリプトID: MHMchiX6c1bwSqGM1PZiW_PxhMjh3Sh48

インストールしたら手動実行してみる(checkCellを選んで▶をクリック)。最初は権限の許可が必要なので許可する。

Slackにこんなふうに送られてきたのでとりあえずOKとします。

[時間主導型]でタスクに登録しておけば定期的に通知もできる。