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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google Apps Script

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

JavaScript

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

Slack

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

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

Q&A

1回答

1910閲覧

【スプレッドシート】条件に一致した場合、Slackへ毎日通知を送る

退会済みユーザー

退会済みユーザー

総合スコア0

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google Apps Script

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

JavaScript

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

Slack

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

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

0グッド

0クリップ

投稿2020/10/02 10:03

編集2020/10/05 03:29

前提・実現したいこと

スプレッドシートで管理している案件を下記の条件に当てはまる場合、毎日該当のチャンネルへ
セル参照+定型文で通知を送りたいです。

<条件>
・申込締切日が作業日より過去になった場合(例:ライブ開催日 10/1、作業日 10/2)
・該当のステータスである事(09まであるうち、05が対象)

<Slackへ通知された際の希望完成形>
@名前
申込締切日の期日が近づいているか、超過しているので、ご対応をお願いします。 ←定型文
申込締切日 LIVE開催日 開催時間 LIVE名 管理番号 ステータス ←各セル参照

発生している問題・エラーメッセージ

エラーは発生していないですが、Slackへの通知が確認できません。
forやif部分にかなり不安があります。

該当のソースコード

//Slack通知の処理判定 function integration() { var activeSpreadsheet = SpreadsheetApp.getActiveSpreadsheet(); // スプレッドシート var progressSheet = activeSpreadsheet.getSheetByName("●●●");//参照するシート名 var progressVal = progressSheet.getRange(7,1,progressSheet.getLastRow(),progressSheet.getLastColumn()).getValues(); var activeCell = progressSheet.getActiveCell(); // アクティブセル // 今日の日付を取得  var todayDate = new Date(); var targetDate = new Date(todayDate.getFullYear(),todayDate.getMonth(),todayDate.getDate()); //繰り返し var lpDueDate; var eventStatus; var lpDueDateArray = [[],[]]; for(i=0; i<progressVal.length; i++){ lpDueDate = new Date(progressVal[i][9]); eventStatus = progressVal[i][3]; //ステータスでの処理判定 if (Utilities.formatDate(lpDueDate,'Asia/Tokyo','yyyyMMdd') != "20200401") { if (lpDueDate.getTime() <= targetDate.getTime()) { if (eventStatus == "0_●●●" || eventStatus == "1_●●●" || eventStatus == "2_●●●" || eventStatus == "3_●●●" || eventStatus == "4_●●●" || eventStatus == "5_●●●") { Logger.log("【申込締切日チェック】 " + (i+7) + "行目はステータスが" + eventStatus + "なので処理対象"); lpDueDateArray.push([Utilities.formatDate(lpDueDate,'Asia/Tokyo','yyyyMMdd'),eventStatus]); } else { // デバッグ用 Logger.log("【申込締切日チェック】 " + (i+7) + "行目はステータスが" + eventStatus + "なので処理対象外"); } } else { // デバッグ用 Logger.log("【申込締切日チェック】 " + (i+7) + "行目は申込締切日が" + Utilities.formatDate(lpDueDate,'Asia/Tokyo','yyyyMMdd') + "で先なので処理対象外"); } } } if(activeCell.getColumn() == 3 && activeCell.getValues() >= 0){//作業日当日より過去が対象 //各取得データ var date = progressSheet.getRange(activeCell.getRow(), 9).getValues();//申込締切日 var eventdate = progressSheet.getRange(activeCell.getRow(), 10).getValues();//LIVE開催日 lpDueDateArray.push([Utilities.formatDate(eventdate,'Asia/Tokyo','yyyyMMdd')]);//日本時間へ変換 var opentime = progressSheet.getRange(activeCell.getRow(), 11).getValues();//開始時間 var name = progressSheet.getRange(activeCell.getRow(), 13).getValues();//LIVE名 var taskNo = progressSheet.getRange(activeCell.getRow(), 1).getValues();//管理番号 var status = progressSheet.getRange(activeCell.getRow(), 2).getValues();//ステータス // 送信するSlackのテキスト var slackText = "申込締切日の期日が近づいているか、超過しているので、ご対応をお願いします。\n" + date + eventdate + opentime + name + taskNo + status + "\n" sendSlack(slackText); } } //通知処理 function sendSlack(slackText){ // WebhookのURL var webHookUrl = "https://hooks.slack.com/●●●"; var jsonData = { "channel": "#●●●", // 通知したいチャンネル "text" : "<@●●●>\n" + slackText,//メンションと通知内容  "link_names" : 1, "username" : "●●●"//名前 }; var payload = JSON.stringify(jsonData); var options = { "method" : "post", "contentType" : "application/json", "payload" : payload, }; //Webhook URL宛にAPIのリクエストを送信 UrlFetchApp.fetch(webHookUrl, options); }

試したこと

for文がない場合は通知ができました。

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

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

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

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

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

guest

回答1

0

forでいきなり書かれている

GAS

1progressVal

ってなに?
その前に変数指定もないしGAS上「progressVal」という命令もないのだけれども

GAS

1.getDataRange();

データが登録されている範囲ならこちらなんだけど、したい事と合致しますか?

投稿2020/10/03 06:08

kuma_kuma_

総合スコア2506

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

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

退会済みユーザー

退会済みユーザー

2020/10/05 03:31

記載が漏れておりました。 シートを取得し、progressValに格納します。 ご回答いただく中で申し訳ございませんが言葉遣いは気を付けていただきたいです。
kuma_kuma_

2020/10/05 04:43 編集

?どの辺りの言葉が気に入らなかったの? さあ、よく見てみようね! > forやif部分にかなり不安があります。 と書いてあるのに、見てみたらその中の変数記載がない?おかしい?ないな? よくあるセル範囲なら「.getDataRange();」を使うけど forの内容からは違うように感じるよね?したい事とはちがうようだけどどうしたいのかな? 質問者様を子供扱いするならその様な書き方に改めますが...
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問