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
あなたの回答
tips
プレビュー