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

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

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

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

Google Apps Script

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

Google

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

解決済

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

tsubugai.taka
tsubugai.taka

総合スコア2

Google Charts

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

Google Apps Script

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

Google

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

2回答

0グッド

0クリップ

2725閲覧

投稿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取得がうまくいってないのかと思うのですが、何が違っているのかが基礎がわかっていないためか原因特定までできませんでした。

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

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

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列に何も書いてなければそういうメッセージになるかなと。 やりたいことを整理して、シートのサンプルがあればコードかけますけど。

回答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

総合スコア12699

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

0

「TypeError: Cannot read property 'getDataRange' of null

sheetsToHangout @ コード.gs:9」

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

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

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

投稿2021/12/30 06:14

papinianus

総合スコア12699

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

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

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

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Google Charts

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

Google Apps Script

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

Google

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