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

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

ただいまの
回答率

90.53%

  • Google Apps Script

    830questions

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

  • Slack

    179questions

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

該当Googleスプレッドシートセルの値が自動変更し指定する条件に一致したら、slackに通知を送りたい

受付中

回答 1

投稿 編集

  • 評価
  • クリップ 3
  • VIEW 1,072

akio0922

score 6

実現したいこと

Googleスプレッドシート上で該当列の値が指定する値と一致する場合、slackに通知を送る。
具体的には、該当する列が「Wチェック完了」になったら、指定するslackチャンネルに以下メッセージが届くようにする。
![イメージ説明

前提

通知を実装するにあたり使用しているツールは以下。
・Google App Script
・Slack(token ID)

発生している問題

成功している状態
該当列のセルに対して[データの入力規制]>[リストを直接指定]>「Wチェック完了」を入力した上で、
自ら直接、プルダウンから「Wチェック完了」を選択すると通知が届く。

失敗している状態
該当列のセルに対してIF関数を入力し、ある条件を満たしたら「Wチェック完了」となるように指定した上で、
ある条件を満たし該当列が「Wチェック完了」になっても通知が届かない。

考えられる問題解決のヒント
直接セルの値を変更するか、自動で(今回はIF関数)セルの値が変更するかの違いにヒントがありそう。

該当のGoogleスプレッドシート

![イメージ説明

該当のソースコード

function alertDataCheckFinish()
{
  var colOffset = 0;
  var dataStartCol = 1;
  var companyNameCol = 1;
  var blandNameCol = 2;
  var keyCol = 12;
  var dataColNum = 12;
  var range = SpreadsheetApp.getActiveRange();
  var rowidx = range.getRow();
  var colidx = range.getColumn();
  Logger.log('checkFinish');
  if(colidx != keyCol){ return ; }
  var sheet = SpreadsheetApp.getActiveSheet();

  var aLine = sheet.getRange(rowidx, dataStartCol, 1, dataColNum);
  if(!aLine){
    return;
  }

  var status = aLine.getCell(1,keyCol-colOffset).getValue();

  var companyName = aLine.getCell(1, companyNameCol-colOffset).getValue();  
  if(!companyName){
    return;
  }

  var blandName = aLine.getCell(1, blandNameCol-colOffset).getValue();  
  if(!blandName){
    return;
  }

  if( status == "Wチェック完了" ){
  var message = '';
    message += '<@アカウント名> *';
    message += companyName;
    message += '(';
    message += blandName;
    message += ')';
    message += '* のWチェックが完了したため、Excelへのデータ移行をお願いします。';
  }
  sendDataCheckFinish(message, "通知botくん", "test");
}

function testDataCheckFinish()
{
  sendDataCheckFinish("通知テストくん", "回答");
}

function sendDataCheckFinish(message, username, postChannel)
{
  var url        = 'https://slack.com/api/chat.postMessage';
  var token      = 'tokenID';
  var channel    = '#チャット名';
  var text       = message;
  var username   = 'データExcel移行依頼BOT';
  var parse      = 'full';
  var icon_emoji = ':smile:';
  var method     = 'post';

  var payload =
  {
  "token": token,
  "channel"    : channel,
  "username" : username,
  "text" : message,
  "username"   : username,
  "parse"      : parse,
  "icon_emoji" : icon_emoji
  };
  var params = {
        'method' : method,
        'payload' : payload
    };

  UrlFetchApp.fetch(url, params);
}

試したこと

スクリプトエディタ上で、トリガー(イベント)を
「スプレッドシートから」・「編集時」
から
「スプレッドシートから」・「値の変更」
と変更したり、
こういったケースが他にもないかネットで調べましたが解決に至りませんでした。

また、上述した「考えられる問題解決のヒント」が怪しいですが、自分で解決できませんでした。

いちいち直接入力・選択しなくても、ある条件を満たしセルが自動で「Wチェック完了」になったら通知、という流れを実現したいです。

解決法をわかる方がいらっしゃったら、是非回答投稿をお願いします。
(自分は非エンジニアでして、上述コードも他のサイトを参考にしたりカスタマイズなどしたりしています)

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

0

変更されてすぐ送られてくる必要がないのであれば、という前提で記します。

私は、似たようなものを作成したことがあり、そのときには、上に示して頂いた画像でいうと
(1)L列の右M列に「送信状況」みたいなカラムを作成
(2)L列「Wチェック完了」かつM列「空」の行を見つけたらSlack送信関数を作成
(3)2の関数を時間をトリガーに起動
みたいなことをしていました。

私が初心者で知識がないことにも由来するのですが、
なぜ、こんなまどろっこしいやり方をしたかというとGoogle Apps Scriptの編集のトリガーが
・関数による値の変更
・スクリプトによる値の変更
に対しては反応しなかったためです。
(なにかしら方法があるのかもしれませんが)

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 90.53%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Google Apps Script

    830questions

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

  • Slack

    179questions

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