How to send Slack & using Google App Script from SpreadSheet
何度かスプレッドシートやフォームを作って、Slack通知するサンプルを何回も作った。 参考サイトを読んで、スクリプトをつくるまでのメモ。
参考
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);
}
}
}