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

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

ただいまの
回答率

90.34%

GASでトリガーを作るスクリプトについて

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 462

前提・実現したいこと

GoogleAppScriptについて質問です。
フォーム提出をトリガーとしたスクリプトを書こうと思っています。
本来トリガーのページ?のようなところから設定できるはず何ですが。

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

スプレッドシートとフォームとのリンクを切っているためか、トリガーがどうやら作用していません。
そこでスクリプトに直接トリガーを作ってしまおうと思っています。しかし下のスクリプトではエラーはない(デバッグでも問題なし)のに思った結果を返してくれません。

該当のソースコード

GAS

function myfunction() {
var ss = SpreadsheetApp.openById('ID!');
var dataA = ss.getSheetByName('NAME!');
var form1 = FormApp.openById('formID');
var responses1 = form1.getResponses();
var new_response = responses1[responses1.length-1].getItemResponses();
var id = parseInt(1000+responses1.length);
var answers = [id];
for(var i=0; i<new_response.length; i++){
answers.push(new_response[i].getResponse());
dataA.getRange(2+responses1.length,i+1).setValue(answers[i]);
}
}

function onSend(){
ScriptApp.newTrigger(form1dataA).forForm('formID').onFormSubmit().create();

}

試したこと

時間主導でのトリガーでは問題ありませんでした。
はじめは.creaate()メソッドを抜いていたのですが、うまくいかなかったので付け足しました。この辺りに関する日本語のサイトが数えるほどしかなく、調べるのに苦労している現状です。

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

①そもそもトリガーをスクリプトで記述するような事態であるかどうか
②トリガーについて新しい関数を作る必要があるのか
③トリガーに関する記述はどこが間違っているのか、というかこれはトリガーを作ることを指しているのか具体的な意味は??

を教えていただきたいです。
ネットで調べた生半可な知識で書いているので理解不十分な程お許し下さい。見よう見まねで書いたプログラムについてどうかご意見頂きたいです。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 2

checkベストアンサー

0

1. トリガーをスクリプトで記述する事態かどうか

記述する必要はありません。
トリガーそのものをプログラムで管理したいならスクリプトで記述する必要がありますが、今回の場合は一度「フォームが送信されたら関数を実行する」というトリガーを手動で設定できれば十分かと思われます。

2. トリガーについて新しい関数を作る必要があるのか

1.でも述べたように、トリガをプログラムで管理する必要はないので、関数も作らなくて良いです。

3. トリガーに関する記述はどこが間違っているのか

トリガーが作用しないのは、そもそもトリガーが全く設定されていないためです。onSend()はGASに元から組み込まれているトリガー関数ではないため、自分で設定しない限りはフォームが送信されても自動で実行されません。
GAS組み込みのトリガー関数は 公式リファレンス に記載されています(英語で申し訳ないですが)

ちなみに、newTrigger()以下も引数が間違っているのでこのままでは動きません。詳しくはリファレンスのサンプルコードを見てください。

ではどうすれば良いのか

手動でトリガーを設定しましょう。
スクリプトエディタから、[編集] > [現在のプロジェクトのトリガー] でトリガーの管理画面が開くので、フォーム送信時にmyfunction()が動くようにトリガーを設定すればよいでしょう。

お役に立てれば幸いです。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2019/03/07 02:38

    もう一つ。
    > ネットで少し調べる程度では引数の正しさなんて判別も出来ません
    と書かれておられますが、GoogleAppsScriptに関しては公式リファレンスが充実しているので非常に参考になります。英語でとっつきにくいかもしれませんが、サンプルコードを見ながら雰囲気を掴むだけでもだいぶ理解が進むと思いますので、ぜひリファレンスを覗くようにしてみてください。

    キャンセル

  • 2019/03/07 09:29

    前回の実行欄は空欄のままでした。スクリプト自体は時間主導のトリガーでは問題なく動くため問題ないはずです。

    別の方からはスプレッドシートから開いたスクリプトエディタだから出来ないかもしれないとのことで、フォームからスクリプトエディタを開き同様のトリガーを設定しましたがこちらも動きませんでした(前回の実行も表示されませんでした)

    キャンセル

  • 2019/03/07 09:33

    すみません確認ミスでした。
    フォームから開いたスクリプトエディタて設定したトリガーは実行した履歴もありませんでしたが、
    元々作ったスプレッドシートから開いたスクリプトエディタで設定したトリガーでは実行した履歴が表示されました。ただエラー率は100%で、関数名をmyfunction()にしたはずですが、履歴では関数名にスクリプトの中身が全て書かれていました。(myfunction(){ ~~~})

    キャンセル

0

申し訳ありません。
やっぱりmyfunctionが原因でした。
//で1度処理を隠していたので結果が見えなかったみたいです。ご迷惑をお掛けしました。

最後に1つ訊かせていただきたいのですが、やはりフォームエディタから開くスクリプトエディタでトリガーを設定する必要がありますか?

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2019/03/07 12:46

    手動でトリガーを設定するなら、おっしゃっている通り
    フォームエディタ > スクリプトエディタ > 現在のプロジェクトのトリガー
    と辿っていって設定するのが良いと思います。

    キャンセル

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

  • ただいまの回答率 90.34%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

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