• Home
  • Akiko Yokoyama
  • Contact
  • Feed
ja | en |

How to send Slack & using Google App Script from SpreadSheet

何度かスプレッドシートやフォームを作って、Slack通知するサンプルを何回も作った。 参考サイトを読んで、スクリプトをつくるまでのメモ。

参考

  • 公式ドキュメント: Class Sheet  |  Apps Script  |  Google Developers
  • 【Google Apps Script入門】セルの取得・変更をする | UX MILK

Googleスプレッドシートでよく使いそうなメソッド

セルのなになにがというものは getRange() でできるし、アクティブなセルを取得するのは spreadsheet.getActiveCell() でできる。

上記のuxmilk.jpのエントリーを参照して学ぶ

1
2
3
4
5
 //セルA1:A3を取得
 var range = sheet.getRange(1, 1, 3);

 //getValues()は配列、getValues()は1件目のみ
 Logger.log(range.getValues());

いろんな記事などを参考にして以下のものをササッとつくる。1度作ればあとは使いまわせる。

1
2
3
4
5
6
7
8
9
10
11
// メールアドレス取得
var editorEmail = Session.getActiveUser().getEmail();

// シート情報を取得
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();  // 現在のスプレッドシートを取得
var sheet       = spreadsheet.getActiveSheet();           // 現在のアクティブなシートを取得
var sheet_url   = spreadsheet.getUrl();                   // アクティブなシートのURLを取得
var cell        = spreadsheet.getActiveCell();            // アクティブなセルを取得

// getRangeメモ
// sheet.getRange(row, column ,[範囲の行数。デフォルト1], [範囲の列数、デフォルト1])

Slackに通知するサンプル

1
2
3
4
5
6
7
8
9
10
11
function postToSlack(body, channel) {
  var url = "[slack webhook url]";
  var data = { "channel" : channel, "username" : "Google通知ボット", "text" : body, "icon_emoji" : ":dog:" };
  var payload = JSON.stringify(data);
  var options = {
    "method" : "POST",
    "contentType" : "application/json",
    "payload" : payload
  };
  var response = UrlFetchApp.fetch(url, options);
}

スクリプトエディタ内で、メソッドを指定して実行やデバッグ実行ができる。 こんな感じでSlackのテストメソッド作ってテスト実行をすると動いてる。

1
2
3
function debugSlack() {
  sendToSlack("Googleテスト通知テスト", "[#slack_channnel_name]");
}

スプレッドシートの最新行を取得するサンプル

参考サイト Google Spreadsheetに新しい行が追加されたらChatworkに通知する - Qiita ブレークポイントを使用できる。デバッグ実行可能
例:1行目のどこかの列にcheckという名前の項目がある前提

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
// メールアドレス取得
var editorEmail = Session.getActiveUser().getEmail();

// シート情報を取得
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();  // 現在のスプレッドシートを取得
var sheet       = spreadsheet.getActiveSheet();           // 現在のアクティブなシートを取得
var sheet_url   = spreadsheet.getUrl();                   // アクティブなシートのURLを取得
var cell        = spreadsheet.getActiveCell();            // アクティブなセルを取得

function onSheetTest(){

  // シートの列番号を検索
  var checkCol = colSearch("check");

  // checkの最後の行を取得
  var lastRow = sheet.getLastRow();  
  var thisChecks  = sheet.getRange(lastRow, checkCol);

  // 列のすべての値を取得する。 
  var thisAllChecks = sheet.getRange(2, checkCol, lastRow);

  // 値は getValue()、複数はgetValues()で取得
  var message  = "ステータス:" + thisChecks.getValue();
  var messageAll  = "all status:" + thisAllChecks.getValues();

}

// ラベル列を検索して列数を返す関数
function colSearch(label) {
  for (i = 1; i <= sheet.getLastColumn(); i++) {
     if (sheet.getRange(1, i).getValue() == label) {
      return Number(i);
    }
  }
}
user-image
Akiko yokoyama in Coding
5 minute read

Similar Posts

3年前にブログの多言語化対応を実はしていた話

Leica Q2 を購入して1年経ちました &レビュー

ブログの再構築を Jekyll + Netlify + Github で行った話

Excel Tips vol.1

WSL / Windows Subsystem for Linux + Ubuntuのセットアップ方法

user-image

Published Jan 16, 2018

Akiko yokoyama in Coding

Also found in

  • Coding

Share this article

3年前にブログの多言語化対応を実はしていた話

Leica Q2 を購入して1年経ちました &レビュー

ブログの再構築を Jekyll + Netlify + Github で行った話

Excel Tips vol.1

WSL / Windows Subsystem for Linux + Ubuntuのセットアップ方法

チャットボット hubot adapterを利用した Slack と Chatwork連携コードサンプル

  • Home
  • Akiko Yokoyama
  • Contact
  • Feed