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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Google Charts

Google Chartsは、円グラフ・棒グラフ・折れ線グラフなどのさまざまなグラフをJavaScriptで容易に表示できる無料のライブラリ。デザインやイベント処理といったカスタマイズができ、商用利用も可能です。

Google Apps Script

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

Google

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

Q&A

解決済

2回答

5648閲覧

Googleチャット に Spreadsheet に書き込みがあった時に通知を送るスクリプト

tsubugai.taka

総合スコア3

Google Charts

Google Chartsは、円グラフ・棒グラフ・折れ線グラフなどのさまざまなグラフをJavaScriptで容易に表示できる無料のライブラリ。デザインやイベント処理といったカスタマイズができ、商用利用も可能です。

Google Apps Script

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

Google

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

0グッド

0クリップ

投稿2021/12/30 04:49

お世話になっております。

スプレッドシートの2列目8行目以降に入力されたときにその内容+「さんから報告あり」とGoogleチャット(スペース)に通知が来るように設定したいのですが、エラーでうまくできません。

こんな初歩的な質問をこの場でしてしまい、誠に申し訳ございませんが、周りにわかる人もおらず困っております。

もし宜しければお力添えを頂けましたら幸いでございます。

function sheetsToHangout() { /* Spreadsheet */ let sheetName = '〇〇〇'; //ここの〇〇〇にはシートタブ名前(シート1等)を入れています let sheet = SpreadsheetApp.getActive().getSheetByName(sheetName); const row = 8; const column = 2; const LastRow = sheet.getDataRange().getLastRow(); const LastColumn = sheet.getDataRange().getLastColumn(); const numRows = LastRow - row + 1; const numColumns = LastColumn - column + 1; let data = sheet.getRange(row, column, numRows, numColumns).getValues(); /* Hangout Chat */ const url = '〇〇〇'; //ここの〇〇〇には実際はWebhookのURLを記入しています for (i=0; i < data.length; i++) { let text = data[i][0]; let message = {'さんから報告あり' : text} let params = { 'method': 'POST', 'headers' : { 'Content-Type': 'application/json; charset=UTF-8' }, 'payload':JSON.stringify(message) }; UrlFetchApp.fetch(url, params); } }

エラー表示は「TypeError: Cannot read property 'getDataRange' of null
sheetsToHangout @ コード.gs:9」と出てきます。

恐らくData取得がうまくいってないのかと思うのですが、何が違っているのかが基礎がわかっていないためか原因特定までできませんでした。

恐れ入りますが、ご教示いただけましたら有難い限りでございます。

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

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

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

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

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

papinianus

2021/12/30 06:15

どういうトリガーを指定しているか、またそのエラーが出るときはどうやって実行しているのか、それぞれご共有ください。
tsubugai.taka

2021/12/30 06:53

シート名は「シート1 / シート2....」などであってますでしょうか? 再度打ち間違いがないようにコピぺしてみましたがだめでした。。 実行する関数を選択  ➔ sheetsToHangout デプロイ時に実行  ➔ Head(これ以外選択肢なし) イベントのソースを選択  ➔ スプレッドシートから イベントの種類を選択  ➔ 編集時 でトリガーを保存しました!
papinianus

2021/12/30 06:55

ダメ、というのは全く同じエラーになるということでしょうか。 エラーはどうやって見ていますか。
tsubugai.taka

2021/12/30 07:00

見てみたらエラー表記がかわっておりました!! 保存➔実行するを押してみて正常に動作するか確認してみています! ただSheetに書き込みがあっても何の通知も現状届いておりません Exception: Request failed for https://chat.googleapis.com returned code 400. Truncated server response: { "error": { "code": 400, "message": "Message cannot be empty.", "status": "INVALID_ARGUMENT" } } (use muteHttpExceptions option to examine full response)
tsubugai.taka

2021/12/30 07:17

作動しました!!ただセルの内容ではなく「さんから報告あり」しかチャットに届かないのと一度の編集で3回くらい通知が届いてしまいます。
papinianus

2021/12/30 11:18

複数送られてくるのは、8から11行まで使っているのではないかと思います。行数が増えれば増えるほど繰り返し送ってくるコードですからそういう意図があると思ってました。 あとは、今、B列の内容しか送らないので、B列に何も書いてなければそういうメッセージになるかなと。 やりたいことを整理して、シートのサンプルがあればコードかけますけど。
guest

回答2

0

ベストアンサー

やったことないんですが、多分 message の text の部分はかえられません。

参照

javascript

1let message = { 2'text' : 'テスト' 3};

質問のコードから推察しますが

javascript

1 let text = data[i][0]; 2 let message = {'さんから報告あり' : text}

↑こうしたいなら

javascript

1 let text = data[i][0]; 2 let message = {'text' : `${text}さんから報告あり`}

という形式ではないかと思います。

投稿2021/12/30 07:12

papinianus

総合スコア12705

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

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

0

「TypeError: Cannot read property 'getDataRange' of null

sheetsToHangout @ コード.gs:9」

は(9行目がどこか不明ですが多分)↓でのエラーだと思います。

const LastRow = sheet.getDataRange().getLastRow();

このエラーからは "sheetName" が間違っているとしか思えないです。

投稿2021/12/30 06:14

papinianus

総合スコア12705

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

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

tsubugai.taka

2021/12/30 06:59

Sheet nameをいじってみたらエラー表示がいつのまにか変わっておりました! Exception: Request failed for https://chat.googleapis.com returned code 400. Truncated server response: { "error": { "code": 400, "message": "Message cannot be empty.", "status": "INVALID_ARGUMENT" } } (use muteHttpExceptions option to examine full response)
papinianus

2021/12/30 07:15

そういう場合は「いつのまにか」ではなくて、"コピペをしたことでシート名が間違っていたのが修正された"、ではないでしょうか。編集時刻とログの時刻からこのことは確かめられるはずです。 もしこれが正しければ私はこの質問に対して正しい答えを出していたことになります。 質問に書いているエラーは解決したので、質問が変わっていると思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問