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

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

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

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

Slack

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

Q&A

1回答

666閲覧

[GAS, Slack] Google Formからのトリガーが、1回目は必ず失敗する。

flowering

総合スコア8

Google Apps Script

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

Slack

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

0グッド

1クリップ

投稿2018/07/04 04:19

Google Formで発注し、それをGoogle Spread Sheetに送り、
Google Spread Sheetの別ページでその情報を加工し記録しています。
この注文を確認するために、
「一番最後の行をとってきて、加工してSlackに投げる」という作業をGoogle Apps Script (GAS)を使って行っています。
トリガーの設定は(実行: showStatus, トリガー: フォームからフォーム送信時)となっています。

ほとんど場合、問題なく動作するのですが、最初の一回目だけどうしてもうまくいきません。
どうやらフォームからの情報が反映されず、前回の注文がSlackに送られているようです。2回目以降は問題なく動きます。

フォームからGoogle spread sheetへの情報の反映が遅いのかと思い、
待ちの処理やシートの再描画等をやってみましたが、効果が無く、問題が改善しません。

もし何かご存知の方がいたらご教示願えないでしょうか?
よろしくお願いいたします。

Google

1function showStatus(){ 2 Utilities.sleep(1000); // シートの処理完了を待つ 3 SpreadsheetApp.flush(); // シートの再描画 4 5 var spreadSheet = SpreadsheetApp.openByUrl('https://docs.google.com/spreadsheets/d/XXXXXXXXXXXXXXXXXXXXXXXXX'); // 取り扱いたいスプレッドシートのURL 6 var sheet = spreadSheet.getSheets()[0]; //1ページ目のシートを取得 7 var num=sheet.getLastRow() 8 9 Utilities.sleep(1000); // シートの処理完了を待つ 10 SpreadsheetApp.flush(); // シートの再描画 11 12 var sheet = spreadSheet.getSheets()[2]; //3ページ目のシートを取得 13 var lastrow = sheet.getLastRow(); 14 var text = '【注文者】 ' + sheet.getRange(num,2).getValue() + ' 【業者】 ' + sheet.getRange(num,13).getValue() + String.fromCharCode(10) + 15 '【品名】 ' + sheet.getRange(num,14).getValue() + String.fromCharCode(10) + 16 '【メーカー】 ' + sheet.getRange(num,15).getValue() + String.fromCharCode(10) + 17 '【型番】 ' + sheet.getRange(num,16).getValue() + ' 【個数】 ' + sheet.getRange(num,17).getValue() + String.fromCharCode(10) + 18 '【コメント】 ' + sheet.getRange(num,18).getValue() + String.fromCharCode(10) + 19 '発注は https://goo.gl/WSYn11' ; 20 21 22 slackPost() ; 23 24 25 function slackPost(){ 26 var url = 'https://slack.com/api/chat.postMessage'; 27 var token = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXx'; 28 var channel = '#09_order'; 29 var username = 'Order'; 30 var parse = 'full'; 31 var icon_emoji = ':smile:'; 32 var method = 'post'; 33 var payload = { 34 'token' : token, 35 'channel' : channel, 36 'text' : text, 37 'username' : username, 38 'parse' : parse, 39 'icon_emoji' : icon_emoji 40 }; 41 var params = { 42 'method' : method, 43 'payload' : payload 44 }; 45 var response = UrlFetchApp.fetch(url, params); 46 } 47}

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

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

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

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

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

macaron_xxx

2018/07/05 07:02

どういう意図かわかりませんが、sheetを途中で上書きしているので、1ページ目のsheetの最終行番号で3ページ目のsheetを参照しているので、おかしなことになっているのではないですか?
macaron_xxx

2018/07/05 07:04

Formに記載した内容をSlackにPostしたいのであれば、Form側のスクリプトで回答を取得して、SlackにPostしたほうがいいような気がしますね。
guest

回答1

0

考えられる原因が
1.APIを叩く回数が多いため
ここを参考にしてデータの取り出しを数回のみで行ってください
https://tonari-it.com/gas-spreadsheet-speedup/

2.Formに書き込んだデータの反映が追いついていない
Formに書き込んだデータをスプレッドシートに書き込んでいるとのことですが、ソースファイルを見ていないため分かりませんが、同じようにコーディングをしていると1と同じように書き込む際にAPIを叩く回数が多いため書込みが遅れている可能性があります

投稿2018/12/12 06:47

tamanegine

総合スコア177

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.51%

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

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

質問する

関連した質問