質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Slack

Slackは、Tiny Speckという企業からリリースされたコミュニケーションツールです。GoogleDriveやGitHubなど、さまざまな外部サービスと連携することができます。

Q&A

1回答

3169閲覧

スプレッドシートで作ったタスク表をGoogle Apps Scriptで取得して、Slackに通知したい!

kumakuma112t

総合スコア8

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Slack

Slackは、Tiny Speckという企業からリリースされたコミュニケーションツールです。GoogleDriveやGitHubなど、さまざまな外部サービスと連携することができます。

0グッド

0クリップ

投稿2017/03/23 10:48

編集2017/03/23 23:34

###前提・実現したいこと
スプレッドシートで作ったタスク表をGoogle Apps Scriptで取得して、Slackに通知したいのですが、知識不足で手こずっております。スプレッドシートを変更した際に、チャンネルに通知するとこまでは出来ました。

次にやりたいのが、slackbotに担当タスクを通知することです。
朝10時もしくは、変更が加わった際に、自分のタスク一覧をbotに通知したい。

###slackbotに下記内容を表示したい

担当者01さんのタスク一覧です。 【未着手】3/30〆 テスト作業01 【未着手】3/31〆 テスト作業01 【未着手】4/1〆 テスト作業01

###スプレッドシート
イメージ説明

https://docs.google.com/spreadsheets/d/18FypSL7pi9CBPQZ3jbpTxOnpHWaBpNxHxXKetNcaVO8/edit?usp=sharing

###その他手こずってるのが、ループ分の処理です
その他手こずってるのが、ループ分の処理です。
担当者の列で、自分の名前があった行のデータを1つのメッセージにまとめて、投稿したいのですが、その記述で書き方がわからず調べてるところです。

###Google Apps Scriptのソースコード

var postUrl = "https://hooks.slack.com/services/xxxxxxxxxx/xxxxxxxxxx/xxxxxxxxxx"; var postChannel = "#channel"; var statusCol = 2; // ステータス列 var deadlineCol = 3; // 締め切り列 var taskTitleCol = 4; // タスクタイトル列 var inChargePersonCol = 5; // 担当列 var dataStartCol = 2; // データが開始する列 var colOffset = 1; // A列はoffset var dataColNum = 6; // データの列数 function myOnEdit() { var range = SpreadsheetApp.getActiveRange(); var rowidx = range.getRow(); var colidx = range.getColumn(); var sheet = SpreadsheetApp.getActiveSheet(); // ステータスに変更のあったtodo1行 var aLine = sheet.getRange(rowidx, dataStartCol, 1, dataColNum); if(!aLine){return;} // ステータスの値 var status = aLine.getCell(1,statusCol-colOffset).getValue(); // 締め切り列の値 var deadline = aLine.getCell(1,deadlineCol-colOffset).getValue(); // 依頼担当列1の値 var username = aLine.getCell(1, inChargePersonCol-colOffset).getValue(); if(!username){username = "unknown";} // タスクの内容 var taskTitle = aLine.getCell(1, taskTitleCol-colOffset).getValue(); if(!taskTitle){return;} if(colidx != statusCol){return;} if( status == '完了' ){ var message = username + "さんが、タスク「" + taskTitle + "」を" + "【完了】" + "にしました"; } else if(status == '未着手' || !status){ var message = username + "さんが、タスク「" + taskTitle + "」を" + "追加しました"; } sendHttpPost(message, "タスクのお知らせ"); } function test() { sendHttpPost("上様が、タスク「ほげほげほげ」のステータスを【進行中】にしました", "テスト"); } function sendHttpPost(message, username) { var jsonData = { "channel" : postChannel, "username" : username, "text" : message }; var payload = JSON.stringify(jsonData); var options = { "method" : "post", "contentType" : "application/json", "payload" : payload }; UrlFetchApp.fetch(postUrl, options); }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

Google App Script では、トリガーが設定できるので、そちらを利用すれば対応可能だと思います。
具体的には、「定期実行のトリガー」と「セルの値が変更になった時のトリガー」を利用する必要があると思います。

参考になりそうなリンクを貼っておきます。

投稿2017/03/23 17:39

tell_k

総合スコア2120

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kumakuma112t

2017/03/23 23:33

ありがとうございます。 トリガー設定で、実行タイミングを自由にできるのは確認できました! その他手こずってるのが、ループ分の処理です。 担当者の列で、自分の名前があった行のデータを1つのメッセージにまとめて、投稿したいのですが、その記述で書き方がわからず調べてるところです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問