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

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

新規登録して質問してみよう
ただいま回答率
85.46%
for

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

Google Apps Script

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

ループ

ループとは、プログラミングにおいて、条件に合致している間、複数回繰り返し実行される箇所や、その制御構造を指します

Slack

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

Q&A

0回答

1732閲覧

GASでスラック通知が重複することがある

SYSYSYSYSYSY

総合スコア8

for

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

Google Apps Script

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

ループ

ループとは、プログラミングにおいて、条件に合致している間、複数回繰り返し実行される箇所や、その制御構造を指します

Slack

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

0グッド

1クリップ

投稿2021/11/29 04:25

編集2021/11/29 06:40

GASで以下のコードを書きました。
スプレッドシート上で変更が起きると(トリガー設定済み)slack通知がとぶものですが、時々同じ行の通知が複数回飛んでくることがあります。
コードに問題があるか、もしくはこの関数を使って複数のシートを処理しているため、シートごとに設けたトリガーが何か原因かと思っておりますが、通知は1度のみ送られてくる時と2~5回送られてくるときがありますので、トリガーではないのかなとも思います。
一度ご確認いただけたら嬉しいです。
よろしくお願いします。

GAS

1function slackNotification(sheetname,slack_channel){ 2 Logger.log(sheetname) 3 ///アクティブなスプレッドシートのシートを取得する 4 var mySheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetname); 5 //選択されているアクティブな範囲を取得する 6 var myActiveRange = mySheet.getActiveRange(); 7 //アクティブな範囲から最初のRow:行、Column:列を取得する 8 var lastRow = mySheet.getLastRow(); 9 var pdfColumn = PDF_column_n 10 var checkColumn = slack_column_n 11 Logger.log(lastRow) 12 13 var unslacked = []; 14 for (var i=1; i <= lastRow; i++){ 15 var cell = mySheet.getRange(i, checkColumn); //名前 16 if(cell.isBlank()){ 17 Logger.log(i + "行目の通知がまだです"); 18 unslacked.push(i); 19 } 20 } 21 Logger.log("未スラック"+unslacked) 22 23 for (var i=unslacked[0]; i <= unslacked[unslacked.length - 1]; i++){ 24 var pdfCell = mySheet.getRange(extention_column+i) //B列がpdfかを判定 25 var checkSlack = mySheet.getRange(slack_column+i) //J列が空かを判定 26 Logger.log(checkSlack.isBlank()) 27 Logger.log(pdfCell.getValue()) 28 29 if (pdfCell.getValue() == "pdf" && checkSlack.isBlank() == true) 30 { 31 var requestId = mySheet.getRange(request_column+i).getValue(); 32 var clientId = mySheet.getRange(client_column+i).getValue(); 33 var claimId = mySheet.getRange(claim_column+i).getValue(); 34 var groupId = mySheet.getRange(group_column+i).getValue(); 35 Logger.log(groupId) 36 37 if (branches.includes(groupId)){ 38 var message = "\nrequestId:" + requestId + "\nclientId:" + clientId + "\nclaimId:" + claimId 39 var postUrl = slack_channel 40 var username = 'botbot'; // 通知時に表示されるユーザー名 41 var icon = ':hatching_chick:'; // 通知時に表示されるアイコン 42 //var message = 'test'; // 投稿メッセージ 43 var jsonData = 44 { 45 "username" : username, 46 "icon_emoji": icon, 47 "text" : message, 48 link_names: 1 49 }; 50 var payload = JSON.stringify(jsonData); 51 52 var options = 53 { 54 "method" : "post", 55 "contentType" : "application/json", 56 "payload" : payload 57 }; 58 59 UrlFetchApp.fetch(postUrl, options); 60 checkSlack.setValue(true); 61 } 62 } 63 } 64 } 65

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問