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

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

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

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

Google Apps Script

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

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Q&A

1回答

972閲覧

通知対象でないものがチャットワークで通知される

yuki0137

総合スコア5

Google スプレッドシート

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

Google Apps Script

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

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

0グッド

0クリップ

投稿2021/07/07 03:12

前提・実現したいこと

データを管理しているシートから条件に合致する行を、通知用の別シートにクエリ関数で抽出しています。
通知用のシートにデータがある場合(下記コードではN列にデータがある場合)は定時にCWでチャットを投下するようにGASを組んでいるのですが、
ここ1ヶ月くらいの間、通知用シートにデータが全くない場合も元のデータ管理シートから情報を引っ張ってきているのか
通知がされるようになりました。
また、通知用シートにデータがある場合でも、そのデータにはない情報をどこからか引っ張ってきて通知することもあります。

元のデータ管理シートを確認しても通知対象となっておらず、なぜ通知しているのか分からない状況です。
以前のように通知用シートにあるデータのみ通知するよう修正したいです。

該当のソースコード

// スプレッドシートのID var SHEET_ID = '●●●●●●'; //スプレッドシートのシート名 var SHEET_NAME = '通知用'; // ChatWork用定数 // チャットルームID // https://www.chatwork.com/#!rid【ここ】 var ROOM_ID = '●●●●●●' ; // アクセストークン var TOKEN = '●●●●●●';     function postChatwork (message) { var payload = { 'body' : message }; var headers = { 'X-ChatWorkToken' : TOKEN }; var options = { 'method' : 'post', 'payload' : payload, 'headers' : headers }; UrlFetchApp.fetch('https://api.chatwork.com/v2/rooms/' + ROOM_ID + '/messages', options); } function onUpdateBatchCheck_Alert_SapporoSendai() { // スプレッドシートを特定 var spreadsheet = SpreadsheetApp.openById(SHEET_ID); var sheet = spreadsheet.getSheetByName(SHEET_NAME); // getvaluesの実行速度が遅いのでシート内容を一括で取得 // A列1行目が[0][0]になることに注意する var data = sheet.getDataRange().getValues(); // チャット送信状態を保持する列のインデックス var targetColumnIndex = 13;// N列の更新を監視する var targetRowIndexes = []; // チャット通知対象の行リスト // チャット通知対象の行リストを生成する // ヘッダが0行目なので読み飛ばす for (var i = 1; i < data.length; i++) { // N列に何らかの入力がある if (data[i][targetColumnIndex]) { targetRowIndexes.push(i); } } // 通知対象行が1なら離脱 if (targetRowIndexes.length == 1) return; // シートの行ごとにメッセージブロックを生成する var msg= ''; for (var i = 1; i < targetRowIndexes.length; i++) { var row = targetRowIndexes[i];// シート上はi+1行目 var cell = data[row][targetColumnIndex];// i+1行目N列のセルの値 msg += Utilities.formatString('[info]%d行目\n%s[/info]', row + 1, cell); } var message = Utilities.formatString('[toall]\nhttps://docs.google.com/spreadsheets/d/18hKT9Y_DQvaN3qD5vdNQteyK3l1dkR3Gq8EG1h17ge0/edit#gid=900048095\n【注意】未処理の案件があります\n%s',msg);   // ChatWorkへメッセージを送信 postChatwork(message); }

試したこと

同様のGASを組んでいるシートが他に4つありますが、そちらは不具合を起こしていませんでした。
組んでいるコードも確認しましたが、不具合を起こしているものとSHEET_IDが異なるだけであとは変わりませんでした。
GASではなくスプレッドシート自体に問題があるのでしょうか。

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

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

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

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

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

guest

回答1

0

targetRowIndexes =[];
(中略)
targetRowIndexes.push(i);

としているので、空の場合には[]のままです。
そのため、以下のように0の場合には処理しないとすべきかと思います。

if (targetRowIndexes.length == 0) return;

また、以下のiも0始まりにする必要があります。

for (var i = 0; i < targetRowIndexes.length; i++) {

投稿2021/07/21 17:45

gas.engine

総合スコア608

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問