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

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

ただいまの
回答率

90.33%

  • Google Apps Script

    951questions

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

  • Slack

    197questions

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

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

受付中

回答 1

投稿

  • 評価
  • クリップ 1
  • VIEW 318

flowering

score 2

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

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

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

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

function showStatus(){
  Utilities.sleep(1000); // シートの処理完了を待つ
  SpreadsheetApp.flush(); // シートの再描画 

  var spreadSheet = SpreadsheetApp.openByUrl('https://docs.google.com/spreadsheets/d/XXXXXXXXXXXXXXXXXXXXXXXXX'); // 取り扱いたいスプレッドシートのURL
  var sheet = spreadSheet.getSheets()[0]; //1ページ目のシートを取得
  var num=sheet.getLastRow()

  Utilities.sleep(1000); // シートの処理完了を待つ
  SpreadsheetApp.flush(); // シートの再描画 

  var sheet = spreadSheet.getSheets()[2]; //3ページ目のシートを取得  
  var lastrow = sheet.getLastRow();
  var text = '【注文者】 ' + sheet.getRange(num,2).getValue() +  '  【業者】 ' + sheet.getRange(num,13).getValue()  + String.fromCharCode(10) + 
             '【品名】 ' + sheet.getRange(num,14).getValue()  + String.fromCharCode(10) + 
             '【メーカー】 ' + sheet.getRange(num,15).getValue() + String.fromCharCode(10) +
             '【型番】 ' + sheet.getRange(num,16).getValue() + ' 【個数】 ' + sheet.getRange(num,17).getValue() + String.fromCharCode(10) +
             '【コメント】 ' + sheet.getRange(num,18).getValue() + String.fromCharCode(10) +
             '発注は https://goo.gl/WSYn11' ;


  slackPost() ;


  function slackPost(){
    var url        = 'https://slack.com/api/chat.postMessage';
    var token      = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXx';
    var channel    = '#09_order';
    var username   = 'Order';
    var parse      = 'full';
    var icon_emoji = ':smile:';
    var method     = 'post';  
    var payload = {
      'token'      : token,
      'channel'    : channel,
      'text'       : text,
      'username'   : username,
      'parse'      : parse,
      'icon_emoji' : icon_emoji
    };
    var params = {
      'method' : method,
      'payload' : payload
    };
    var response = UrlFetchApp.fetch(url, params);
  }
}
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

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

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

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • macaron_xxx

    2018/07/05 16:02

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

    キャンセル

  • macaron_xxx

    2018/07/05 16:04

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

    キャンセル

回答 1

0

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

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

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

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • Google Apps Script

    951questions

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

  • Slack

    197questions

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