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

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

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

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

Google フォーム

Google フォームは、 Google社が提供しているアンケートフォーム作成および集計ができる無料のツール。Googleアカウントがあれば利用が可能です。集計データは、スプレッドシートに収集され、データ分析もできます。

Google Apps Script

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

Slack

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

Q&A

2回答

1465閲覧

Googleフォーム→Googleスプレッドシート→Slackへの連携

Maacco

総合スコア0

Google スプレッドシート

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

Google フォーム

Google フォームは、 Google社が提供しているアンケートフォーム作成および集計ができる無料のツール。Googleアカウントがあれば利用が可能です。集計データは、スプレッドシートに収集され、データ分析もできます。

Google Apps Script

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

Slack

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

0グッド

1クリップ

投稿2021/11/24 01:51

前提・実現したいこと

業務で、
■Googleフォームからの申請がスプレッドシートに反映される

■そのスプレッドシートの内容(欲しいセルの内容のみ)をSlackに連携させる
ことを行いたいです。

※現在GoogleフォームからSlackへの連携はできているのですが、スプレッドシートに表示される案件番号をSlackに投稿したいため、この形式を考えています。

超初心者なので、様々なサイトを参考に以下のようなコードを書いてみたのですが、うまく動きません…。

ちなみにトリガーは
・スプレッドシートから
・フォーム送信時
・関数 postSheetChange
にしています。

アドバイスいただけないでしょうか。
どうぞよろしくお願いいたします。

該当のソースコード

var postText; /* ** GoogleSpreadSheetの変更をSlackに通知する関数 */ function postSheetChange(){ //自作の関数:slackに通知する文字列を作成 createSendMessage(); //slackに通知する文字列を設定 var postText = this.postText; //自作の関数: textをslackに通知する関数を呼び出す postSlack(postText) } /* ** textをslackに通知する */ function postSlack(text){ var url = “Webhookで取得したURL”; var options = { “method” : “POST”, “headers”: {“Content-type”: “application/json”}, “payload” : JSON.stringify({ “channel” : “slackのチャンネル名”, “text” : text, }) }; UrlFetchApp.fetch(url, options); } function createSendMessage(){ var time = new Date(); var month = time.getMonth() + 1; var day = time.getDate(); var today = month + “月” + day + “日” var postText; var notifySheet = SpreadsheetApp.getActiveSpreadsheet(); //アクティブセルを取得する var myCell = notifySheet.getActiveCell(); //アクティブセルがA列の場合(rowNO)のみ通知する if(myCell.getColumn() == 1){ var rowNum = myCell.getRow(); this.postText = “<!here>“ “●rowNO:” + notifySheet.getRange(“A” + rowNum).getValue() + “\n” + “●依頼者:” + notifySheet.getRange(“D” + rowNum).getValue() + “\n” + “●依頼対象:” + notifySheet.getRange(“G” + rowNum).getValue() + “\n” + “●対象URL:” + notifySheet.getRange(“J” + rowNum).getValue() + “\n” + “●依頼内容:” + notifySheet.getRange(“I” + rowNum).getValue() + “\n”+ “●反映日:” + notifySheet.getRange(“K” + rowNum).getValue() + “\n”+ “●ドライブ:” + notifySheet.getRange(“N” + rowNum).getValue() + “\n”+ ;“スプレッドシート自体のURL“; } }

補足情報(FW/ツールのバージョンなど)

postSheetChangeの関数は動いており、スクリプトから実行してみるとSlackに「@here」のみ投稿されました。
フォーム送信→スプレッドシート→Slackへの連携が取れていません…。

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

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

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

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

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

guest

回答2

0

質問文を見るに、フォーム送信時のトリガーは設定済みとのことですので、

"<!here>" のあとに +を入れてもうまく動かない原因は、

・コード内のダブルクォーテーションが「“」「”」(全角文字)になっている。->正しくは半角文字("")
・「;“スプレッドシート自体のURL“;」 の先頭にセミコロン「;」が入っている

この2つのいずれか、もしくは両方であると思います。

したがって、下記のように直した場合いかがでしょうか。
(コード内のダブルクォーテーションを半角に直し、
「;“スプレッドシート自体のURL“;」 の先頭セミコロン「;」を削除)

js

1 2var postText; 3/* 4** GoogleSpreadSheetの変更をSlackに通知する関数 5*/ 6function postSheetChange() { 7 8 //自作の関数:slackに通知する文字列を作成 9 var postText = this.postText 10 createSendMessage(); 11 //slackに通知する文字列を設定 12 13 //自作の関数: textをslackに通知する関数を呼び出す 14 postSlack(postText) 15} 16 17/* 18** textをslackに通知する 19*/ 20function postSlack(text) { 21 var url = "Webhookで取得したURL"; 22 var options = { 23 "method" : "POST", 24 "headers": { "Content - type": "application / json" }, 25 "payload" : JSON.stringify({ 26 "channel" : "slackのチャンネル名", 27 "text" : text, 28 }) 29}; 30UrlFetchApp.fetch(url, options); 31} 32 33function createSendMessage() { 34 var time = new Date(); 35 var month = time.getMonth() + 1; 36 var day = time.getDate(); 37 var today = month + "月" + day + "日" 38 var postText; 39 var notifySheet = SpreadsheetApp.getActiveSpreadsheet(); 40 41 //アクティブセルを取得する 42 var myCell = notifySheet.getActiveCell(); 43 44 //アクティブセルがA列の場合(rowNO)のみ通知する 45 if (myCell.getColumn() == 1) { 46 var rowNum = myCell.getRow(); 47 // this経由ではなく、文字列を返す関数とする。 48 this.postText = 49 "< !here >" + 50 "●rowNO:" + notifySheet.getRange("A" + rowNum).getValue() + "\n" + 51 "●依頼者:" + notifySheet.getRange("D" + rowNum).getValue() + "\n" + 52 "●依頼対象:" + notifySheet.getRange("G" + rowNum).getValue() + "\n" + 53 "●対象URL:" + notifySheet.getRange("J" + rowNum).getValue() + "\n" + 54 "●依頼内容:" + notifySheet.getRange("I" + rowNum).getValue() + "\n"+ 55 "●反映日:" + notifySheet.getRange("K" + rowNum).getValue() + "\n"+ 56 "●ドライブ:" + notifySheet.getRange("N" + rowNum).getValue() + "\n"+ 57 "スプレッドシート自体のURL"; 58 } 59}

(また、postText をthisを経由して渡していますが、コードを見る限りでは、
createSendMessage()を文字列を返す関数として、渡した方が良いのではないかと思います
(上では直していません))

投稿2021/11/24 11:26

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

Maacco

2021/11/25 01:34

ありがとうございます!本日修正して試してみます!!
guest

0

postSheetChangeの関数は動いており、スクリプトから実行してみるとSlackに「@here」のみ投稿されました。

これに関しては "<!here>" のあとに + が抜けているからだと思います。それのせいで後続の文字列部分が連結されず、使われない文字列データになっています。

ここでの「動かない」というのは、この送信メッセージの問題以前に「フォームを送信したタイミングでシートにデータは書き込まれているが、その関数が実行されていない」という意味でしょうか?もしそうであれば、スクリプト実行のトリガーの設定が抜けているのではないかと思います。

参考:

投稿2021/11/24 02:15

seratch

総合スコア215

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

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

Maacco

2021/11/24 04:23

早速のご返信、ありがとうございます! "<!here>" のあとに + が抜けている →こちら修正しました、ありがとうございます! おっしゃる通り、「フォームを送信したタイミングでシートにデータは書き込まれているが、その関数が実行されていない」状態です。 参考でいただいたURLをもとに ・postSheetChange ・スプレッドシートから ・起動時 に設定してみましたが、投稿されませんでした… noteでいただいた参考資料をコードを見比べて、違いがなかったのですが。。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問