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

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

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

Google AnalyticsはGoogleが開発した無料のウェブ分析のソリューションです。複数のクライアント側のAPIとデータをエクスポートし管理するREST APIも格納されています。

Google Apps Script

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

ChatWork

業務の効率化を目的としたコミュニケーションツール。 グループチャット、ビデオ・音声通話、ファイル共有、タスク管理などの機能を備えています。マルチデバイス対応で、ブラウザだけでなくタブレットやスマートフォンでも利用可能です。

Q&A

解決済

1回答

1641閲覧

Analyticsの結果を毎朝チャットワークに送信する方法

ryu01212008

総合スコア26

Google Analytics

Google AnalyticsはGoogleが開発した無料のウェブ分析のソリューションです。複数のクライアント側のAPIとデータをエクスポートし管理するREST APIも格納されています。

Google Apps Script

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

ChatWork

業務の効率化を目的としたコミュニケーションツール。 グループチャット、ビデオ・音声通話、ファイル共有、タスク管理などの機能を備えています。マルチデバイス対応で、ブラウザだけでなくタブレットやスマートフォンでも利用可能です。

0グッド

0クリップ

投稿2018/09/19 03:44

編集2018/09/19 04:15

実現したいこと

Google Analyticsの毎日のレポートを自分のチャットワーク宛に送信したいと思っているのですが、
エラーメッセージが出てしまい進めません。
解決方法をご教授いただきますようお願いいたします。

発生している問題・エラーメッセージ

TypeError: null のメソッド「getSheetByName」を呼び出せません。(行 4、ファイル「コード」)

該当のソースコード

GoogleScript

1function cwFromGA() { 2 3 var mySS=SpreadsheetApp.getActiveSpreadsheet(); //スプレッドシートを取得 4 var sheetDaily=mySS.getSheetByName("SCデイリーレポート"); //SCデイリーレポートシートを取得 5 6 var rowDaily=sheetDaily.getDataRange().getLastRow(); //SCデイリーレポートシートの使用範囲のうち最終行を取得 7 8 var yDate = sheetDaily.getRange(rowDaily,1).getValue(); 9 10 /* チャットワークに送る文字列を生成①全体レポート */ 11 var strBody = "[info][title]SCデイリーレポート " + 12 Utilities.formatDate(yDate, 'JST', 'yyyy/MM/dd') + "[/title]" +  //ga:date 13 "ユーザー: " 14 + sheetDaily.getRange(rowDaily,2).getValue() + "\n" + //ga:users 15 "セッション: " 16 + sheetDaily.getRange(rowDaily,3).getValue() + "\n" + //ga:sessions 17 "直帰率: " 18 + Number(sheetDaily.getRange(rowDaily,4).getValue()*100).toFixed(1) + "%\n" + //ga:bounceRate 19 "平均セッション時間: " 20 + Number(sheetDaily.getRange(rowDaily,5).getValue()).toFixed(1) + "\n" + //ga:avgSessionDuration 21 "ページビュー: " 22 + sheetDaily.getRange(rowDaily,6).getValue() + "\n" + //ga:pageviews 23 "ページビュー/セッション: " 24 + Number(sheetDaily.getRange(rowDaily,7).getValue()).toFixed(2) + "[hr]"; //ga:pageviewsPerSession 25 26 /* チャットワークに送る文字列を生成②記事ランキング */ 27 var sheetPost=mySS.getSheetByName("SC記事別レポート"); //SC記事別レポートシートを取得 28 29 for(var i=1;i<=10;i++){ 30 31 strBody = strBody + "[" + i + "] " + sheetPost.getRange(i+15,2).getValue() + ":" 32 + sheetPost.getRange(i+15,3).getValue() + "\n"; 33 34 } 35 36 strBody = strBody + "[hr]" 37 + mySS.getUrl() + "[/info]"; //スプレッドシートのURLを取得 38 // チャットワークにメッセージを送る 39 var cwClient = ChatWorkClient.factory({token: 'ここのチャットワークのAPI'}); //チャットワークAPI 40 cwClient.sendMessage({ 41 room_id: ここにルームID, //ルームID 42 body: strBody 43 }); 44}

試したこと

エラーメッセージに従って、シート名の変更を試みましたが解決しませんでした。

### チャットワークにテスト送信した時に成功したソース

GoogleScript

1function sendMessageTest() { 2 var client = ChatWorkClient.factory({token: 'ここにAPI'}); //チャットワークAPI 3 client.sendMessage({ 4 room_id:ここにルームID, //ルームID 5 body: 'チャットワークにメッセージを表示するテスト'});}

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

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

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

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

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

papinianus

2018/09/19 04:12

どこに書いてどうやってトリガを設定していますか?
guest

回答1

0

ベストアンサー

GAS

1var mySS=SpreadsheetApp.getActiveSpreadsheet();

この部分でスプレッドシートが取得できていないみたいですが、リファレンスには

Returns null if there is none.

とあります。

これって、スプレッドシートに紐づくスクリプトですよね?

投稿2018/09/19 03:53

macaron_xxx

総合スコア3191

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

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

ryu01212008

2018/09/19 04:12 編集

早速の回答ありがとうございます。初めて導入するもので、GASの仕様などが細かくわかりかねるのですが、別のテスト送信をした時にはチャットワークに送れたので、スプレッドシートに紐づくものだと勝手に思っておりました。参考にその時のソースを追記しておきます。
papinianus

2018/09/19 04:13

スプレッドシートを開いて、メニューのスクリプトエディタから書いているのか、ドライブにスクリプトファイルを追加して書いているのか、どちらでしょう?
ryu01212008

2018/09/19 04:16 編集

後者のドライブにスクリプトファイルを追加して書いている方に該当します。
ryu01212008

2018/09/19 04:24

ドライブにスクリプトファイルを追加して書いていたのですが、該当のスプレッドシートのメニューのスクリプトエディタで編集したところ解決しました!
ryu01212008

2018/09/19 04:24

ありがとうございました!
macaron_xxx

2018/09/19 04:56 編集

@papinianusさん フォローありがとうございます。 @ryu01212008さん ドライブにスクリプトファイルを追加すると、ActiveSpreadsheetってどれ!?という状態になるんです。 そういう場合にはopenById(id)やopenByUrl(url)を使います。 https://developers.google.com/apps-script/guides/standalone https://developers.google.com/apps-script/guides/bound こちらの、スタンドアロンスクリプトとバインドコンテナスクリプトの違いも見ておいてくださいね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問