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

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

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

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

Q&A

1回答

1408閲覧

gasで、チャットワークにメッセージ送信時、スプレッドシートからのデータを送ると「#N/A」が送られてしまう

shika29

総合スコア0

Google スプレッドシート

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

0グッド

0クリップ

投稿2021/10/28 04:24

前提・実現したいこと

こちらを参考に
https://tonari-it.com/gas-chatwork-omikuji/
gasで、チャットワークにメッセージを送信はできたのですが、
スプレッドシートの内容を取得してチャットワークに送信すると、
取得したメッセージ送信後、数秒後に「#N/A」が送られてしまいます。

いろいろ試したところ、どうやら上記スプレッドシートの内容を取得している部分を、
外すと「#N/A」は送られてこないため、ここが問題だと思っているのですが、
ログでエラーもなさそうで、解決に至りませんでした。
どのように対応すればよろしいでしょうか?

該当のソースコード

function message(){ /* メッセージを取得 */ var params = { headers : {"X-ChatWorkToken" : 'XXX'}, method : "get" }; var roomID = XXX; //ルームID var url = "https://api.chatwork.com/v2/rooms/" + roomID + "/messages?force=0"; //指定のグループチャットからメッセージを取得 var strRespons = UrlFetchApp.fetch(url, params); //チャットワークAPIエンドポイントからレスポンスを取得 var json = JSON.parse(strRespons.getContentText()); //文字列をJSON形式として解析しJSONオブジェクトとして返す /* リクエスト用パラメータ・URLの準備 */ params.method="post"; //リクエストメソッドをpostに設定 var payload = { body : "" }; params.payload=payload; //リクエストペイロードのbodyを一旦セット url = "https://api.chatwork.com/v2/rooms/" + roomID + "/messages"; //指定のグループチャットにメッセージを送る /* json内に指定のメッセージがあればチャットワークに送信 */ for(var i=0;i< json.length;i++){ var obj = json[i]; var pattern= /.*(XXX).*/g; //反応するメッセージの定義 if(pattern.test(obj.body)){ params.payload.body = message2() ; //チャットワークに送るテキスト UrlFetchApp.fetch(url, params); //チャットワークAPIエンドポイントにリクエスト } } } function message2(){ var  ss = SpreadsheetApp.getActiveSpreadsheet(); var  sht = ss.getSheetByName('シート名');  set = sht.getRange('A1').setValue("hoge"); //検索用に一旦スプレにセット  get = sht.getRange("B2").getValue(); //検索結果の取得 results= [get]; return results[Math.floor(Math.random()*results.length)]; // ランダムの必要はいため後で修正 }

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

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

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

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

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

guest

回答1

0

おみくじから改造した部分がどうなるべきなのかが不明ですが、
現在どうなっているかを確かめる方法はあります。

javascript

1 get = sht.getRange("B2").getValue(); //検索結果の取得 2 results = [get]; 3 return results[Math.floor(Math.random() * results.length)]; // ランダムの必要はいため後で修正 4

一旦止めたい部分でdebuggerと書いて、実行ではなくデバッグボタンを押してみてください。
そのときの変数の中身が表示されます。

もしくは
console.logなどで確かめていきましょう。

getには何が入るか?
resultsには何が入るのか?
return している results[Math.floor(Math.random() * results.length)];
はなにがはいるか?

javascript

1console.log(results[Math.floor(Math.random() * results.length)])

javascript

1return get;

にすればB2の値が入ると思います。

投稿2021/11/09 02:56

461

総合スコア76

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問