GASについての質問です。スプレッドシートに入力した情報を基に、GASを使って、フォームを生成するスクリプトを作ったのですが、今度は得られた回答を再度スクリプトで処理する必要が出てきました。回答を処理するスクリプトはフォームを送信する際のonFormSubmitで処理するのですが、スプレッドシートに紐づいたスクリプトからフォームを生成する際に、フォームにこのスクリプトを既に備えて生成することは可能でしょうか?もしくは、フォームを生成後、改めてonFormSubmitのスクリプトをコンテナバインドスクリプトとして記録する必要があるのでしょうか。お分かりになる方よろしくお願いいたします。

1件の回答

回答を書く

1050789

2026-02-27 06:05

+ フォロー

できますが、「フォーム側にスクリプトを書き込む」のではなく、スプレッドシート側のスクリプトからフォーム送信トリガーを作成して対応します。

理由と補足を説明します。
GASでは、別のスクリプトプロジェクトにコードを書き込むことはできないため、「フォームを生成した時点で、そのフォームにコンテナバインドのコードを自動で埋め込む」ことはできません。ですので、コンテナバインドスクリプトを自動生成するようなことは基本的にできない前提になります。

代わりに、今お使いの「スプレッドシートに紐づいたスクリプト」の中に回答処理用の関数を用意しておき、そのスクリプトからフォーム送信トリガーを作成します。例えばイメージとしては次のような流れです。

1 フォームを作成する
2 作成したフォームを対象に onFormSubmit のインストール型トリガーを作成する
3 トリガーが呼び出す関数(回答処理用)も同じスプレッドシート側スクリプトに書いておく

コード例の雰囲気は次のようになります。

var form = FormApp.create(“タイトル”);
// 質問項目などをここで作成

// フォーム送信トリガーを作成
ScriptApp.newTrigger(“onFormSubmitHandler”)
.forForm(form)
.onFormSubmit()
.create();

// 回答処理用
function onFormSubmitHandler(e) {
// e.response などを使って処理を書く
}

このようにすれば、フォームの回答送信時にスプレッドシート側のスクリプトが呼ばれますので、改めてフォーム側にコンテナバインドスクリプトを手で作る必要はありません。


追記


はい、フォーム作成のスクリプトと同じファイル内に記述して大丈夫です。

理由を説明します。
GASでは「どのファイルに書くか」はあまり重要ではなく、「同じスクリプトプロジェクト内にあるかどうか」がポイントになります。フォーム生成の関数も、トリガーを作成する処理も、onFormSubmit用のハンドラ関数も、同じプロジェクト内にあれば問題なく動きます。

よくある構成の例としては次のような感じです。

・setupForm関数:フォームを新規作成し、必要な項目を追加する
・setupTrigger関数:作成したフォームに対して onFormSubmit トリガーを作成する
・onFormSubmitHandler関数:回答を受け取って処理する関数(トリガーから呼ばれる)

これらは全部、同じスクリプトプロジェクト内の同じファイルに書いてもいいですし、見やすくするためにファイルだけ分けても構いません。
一点だけ注意として、トリガーから呼ばれる関数(onFormSubmitHandler)は、他の関数の中にネストせず、グローバルに定義しておく必要があります。

うったえる有益だ(0シェアするブックマークする

Copyright © 2026 AQ188.com All Rights Reserved.

博識 著作権所有