1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Posted at

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

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

ツール -> スクリプトエディタ を開いてスクリプトファイルを登録する。
image.png
スクリプトファイル コピペ用("//編集"はそれぞれの環境で編集が必要)

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のマスクしている部分
image.png

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

リソース -> ライブラリ
image.png

スクリプトID: MHMchiX6c1bwSqGM1PZiW_PxhMjh3Sh48
image.png

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

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

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

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?