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

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

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

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

Google Apps Script

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Slack

Slackは、Tiny Speckという企業からリリースされたコミュニケーションツールです。GoogleDriveやGitHubなど、さまざまな外部サービスと連携することができます。

Q&A

解決済

1回答

2077閲覧

スプレッドシートの内容をSlackに自動投稿したい

退会済みユーザー

退会済みユーザー

総合スコア0

Google スプレッドシート

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

Google Apps Script

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Slack

Slackは、Tiny Speckという企業からリリースされたコミュニケーションツールです。GoogleDriveやGitHubなど、さまざまな外部サービスと連携することができます。

0グッド

1クリップ

投稿2023/04/22 00:42

編集2023/04/23 00:07

実現したいこと

  • Googleスプレッドシートで日付ごとに整理された表をGoogle App Scriptで読み込み、対応する日付の10時台にSlackに投稿したい

前提

Slackに毎日(または指定した日付で)、Googleスプレッドシートの内容を自動投稿するシステムを作っています。
スプレッドシートの表は以下のような形式です。

日付花の名前学名花言葉
2/1チューリップTulipa「愛の告白」「美しい瞳」
2/2バラRosa「愛」「美」

以降、1か月分のデータが続きます。
スプレッドシートの表は毎月手動作成で、「23年2月」「23年3月」といった具合にタブで月を分けていきます。
スプレッドシートA列の日付に対応した行の内容をSlackに自動投稿します。

Slack AppsのライブラリはGASに導入済みです。
GASのトリガーを時間主導型で、毎日10-11時に発動するように設定して、テスト稼働したところ、
以下のエラーメッセージが発生しました。

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

TypeError: slack.authorize is not a function at postToSlack(コード:3:9)

該当のソースコード

JavaScript

1function postToSlack() { 2 var slack = SlackApp.create('hogehoge'); 3 slack.authorize('hogehoge'); 4 var channelName = '#hogehoge'; // 投稿するチャンネル名を設定 5 var sheetId = "hogehoge"; // スプレッドシートのIDを設定 6 var sheetName = "23年4月"; // シート名を設定 7 var timeZone = "Asia/Tokyo"; // タイムゾーンを設定 8 9 var ss = SpreadsheetApp.openById(sheetId); 10 var sheet = ss.getSheetByName(sheetName); 11 var range = sheet.getDataRange(); 12 var values = range.getValues(); 13 var today = new Date(); 14 15 for (var i = 1; i < values.length; i++) { 16 var date = values[i][0];//A列の値 17 var name = values[i][1];//B列の値 18 var title = values[i][2];//C列の値 19 var quote = values[i][3];//D列の値 20 if (date.getFullYear() === today.getFullYear() && date.getMonth() === today.getMonth() && date.getDate() === today.getDate()) { 21 var body = "<@here> 今日の花言葉 \n" + "【花で彩る、日々の暮らし】\n" + "リラックスしたいときやインスピレーションがほしい時、少し幸せになれる花言葉をご紹介! \n"; 22 var message = name + ":" + title + "(" + quote + ")"; 23 slack.postMessage(channelName, message); 24 break; 25 } 26 } 27}

試したこと

  • slack.authorizeの一文を丸ごと削除

補足情報

  • Slackのカスタムインテグレーションで、Webhookを利用した実装は避けたいです。

(Slack側の推奨方法がSlack Appsを利用した実装のため。)

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

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

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

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

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

YellowGreen

2023/04/22 01:27

slack.authorizeの一文を丸ごと削除 で実行した結果はどうなったのでしょうか?
YellowGreen

2023/04/22 01:36 編集

配列の繰り返し処理のところは、インデックスが0から始まるので、 for (i = 1; i < values.length; i++) { なら2行目の値から取得開始するようになってます。 1行目が見出し行ならこのままで構いませんが。 繰り返す処理のところは、 var date = values[i][0];//A列の値 var name = values[i][1];//B列の値 var title = values[i][2];//C列の値 var quote = values[i][3];//D列の値 となるのでは?
退会済みユーザー

退会済みユーザー

2023/04/22 03:33

slack.authorizeの一文を削除して実行すると、今度は TypeError: date.getFullYear is not a function というエラーが表示されるようになりました。
YellowGreen

2023/04/22 03:35 編集

2023/04/22 10:36 編集 のコメントの修正をされてますでしょうか? 前のままだと、B列の値を日付に代入しています。
退会済みユーザー

退会済みユーザー

2023/04/23 00:08

ありがとうございます。 for文の箇所は、スプレッドシートの1行目が見出し行なので問題ないです。 繰り返し処理の箇所は、コメントでいただいた通りに修正いたしました。
退会済みユーザー

退会済みユーザー

2023/04/23 00:45

slack.authorizeの部分を postUrl = 'hogehoge'; に書き換えたところ、エラーは出なくなりました。 しかし依然、Slackへの投稿が行われません。
YellowGreen

2023/04/23 00:45

どれかの行のA列を4/23にしてからエディタでスクリプトを実行すると Slackの指定のチャンネルに学名(花言葉)が投稿されますのでトリガーから実行しても動作すると思います。 動作しないなら、日付の入力がどうなっているのか確認してみてください。 表示は4/23 でも2023/04/23の日付になっている必要があります。 今年の日付が入っていないとスクリプトでは年の一致もチェックしているので。
YellowGreen

2023/04/23 00:46

slack.authrizeはコメントにしてください。 私のところでは、エラーなく投稿されましたよ。
YellowGreen

2023/04/23 00:52 編集

postUrl = 'hogehoge';も不要です。
退会済みユーザー

退会済みユーザー

2023/04/23 00:55

いただいたアドバイス(本日の日付の行の作成, 日付の形式, slack.authrizeのコメントアウト)も試してみましたが、まだ動作しません... 検証までいただき、ありがとうございます...
YellowGreen

2023/04/23 00:55

編集後にお示しいただいたコードをコピペして slack.authorizeをコメントにして、 User OAuth Tokenとチャンネル名を書き換え、 シートの日付をかえたたけです。
退会済みユーザー

退会済みユーザー

2023/04/23 00:55

>postUrl = 'hogehoge';も不要です。 SlackのBot User OAuth Tokenは、GAS内に入力する必要はないのでしょうか?
YellowGreen

2023/04/23 00:56

createで入力してますよね。
YellowGreen

2023/04/23 00:58 編集

このスクリプトは、Botじゃないのでは?
YellowGreen

2023/04/23 00:59

ご自身のユーザ名で投稿するスクリプトですよね。
退会済みユーザー

退会済みユーザー

2023/04/23 00:59

すみません、Createの部分の入力内容を勘違いしており、Bot名を()内に入れておりました... アドバイスいただいた通りに、Bot User OAuth Tokenを入れて実行すると無事に投稿されました。 誠にありがとうございます!!
YellowGreen

2023/04/23 02:03

花言葉に詳しくないですが、年に関係なく日付で決まるのであれば、 if (date.getFullYear() === today.getFullYear() && date.getMonth() === today.getMonth() && date.getDate() === today.getDate()) { を if (date.getMonth() === today.getMonth() && date.getDate() === today.getDate()) { にすれば、年に関係なく月日があっている日に送信できますので、 シートの日付を毎年更新しなくても使えるようになります。
退会済みユーザー

退会済みユーザー

2023/04/24 02:21

ありがとうございます! 早速実装させていただきました。
guest

回答1

0

ベストアンサー

YellowGreen様
お世話になりました。Kaz1886でございます。
ご回答ありがとうございました。
ベストアンサーにする方法が解らないので、『自己解決』という形で本件をクローズさせていただきます。

投稿2023/08/02 03:05

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問