Help us understand the problem. What is going on with this article?

GASでスプレッドシートの内容をSlackに投稿

More than 1 year has passed since last update.

目的

自分はTeamに所属していて会計をやっています。
スプレッドシートで会計の記録を管理してるんだけど一々支払いを呼びかけるの面倒臭いから自動でSlackに通知してしまおう。という目論見で開発。

GASとは?

  • Google Apps Scriptの略
  • Googleが提供するサービスをスクリプトで操作できる

Slackの設定

  • 「Manage team members」 → 「Home」 → 「Incoming WebHooks」 → 「Add Configuration」からWebhookを追加する。
  • チャンネル名の設定、WebhookURLの保管、アイコンの設定などを必要に応じて行う。

スプレッドシートの作成

スプレッドシートの中身は割愛するが、下図の該当箇所をSlackに送りたい。
名称未設定.png

GASの作成

「ツール」 → 「スクリプトエディタ」にてプロジェクト作成
作成したプロジェクトに以下を記載

//WebhookのURLとチャンネル名
var postUrl = 'hogehoge';
var postChannel = '#money';

//スプレッドシートのメッセージ取得
function getMessage(){
  //スプレッドシートのURL
  var spreadSheet = SpreadsheetApp.openByUrl('hogehoge');
  //シートの番号
  var sheet = spreadSheet.getSheets()[2];
  //取得するシートの行列(28行目、1列目、5行分、2列分)
  var messageArray = sheet.getRange(28, 1, 5, 2).getDisplayValues(); //2次元配列
  var message = new Array();

  //2次元配列を1次元配列に変換
  for(var i = 0; i < messageArray.length; i++){
    for(var j = 0; j < messageArray[i].length; j++){
      message.push(messageArray[i][j]);
    }
  }
  //配列を改行で連結
  var sendMessage = message.join('\n');

  return sendMessage;
}

//Main
function postToSlack(){
  //('送信するメッセージ', '送信するユーザー名', '送信するユーザーのアイコン')
  sendHttpPost(getMessage(), 'money', ':moneybag:');
}

function sendHttpPost(message, username, icon){
  //チャンネル、ユーザー名、アイコン、メッセージ内容をJsonで設定
  var jsonData = {
    "channel" : postChannel,
    "username" : username,
    "icon_emoji" : icon,
    "text" : message
  };
  var payload = JSON.stringify(jsonData);
  //送信設定
  var options = {
    "method" : "post",
    "contentType" : "application/json",
    "payload" : payload
  };
  //POSTリクエスト
  UrlFetchApp.fetch(postUrl, options);
}

動作テスト

postToSlack()を実行する
スクリーンショット 2019-01-21 23.20.05.png

トリガーの設定

Excel VBAとは異なり、トリガーを設定することで、サーバーで自動的に実行される。

  • 「編集」 → 「現在のプロジェクトのトリガー」 → 「トリガーを追加」にて様々な設定のトリガーが追加できる。
  • 今回は毎月23日に実行されるよう設定。

まとめ

面倒だった会計処理もGASのおかげで楽になった。

dragonnn
社会人2年目プログラマ 大したスキル無いけどアウトプット頑張ります
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした