2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Google Apps Script からGoogleフォームの回答を送信する

Posted at

Google Apps ScriptからGoogleフォームの回答を送信する方法です。
GASからフォームの回答を送信する方法について、リファレンスからサンプルコードを起こしたものです。

送信までの流れ

回答を送信するまでの流れは以下の通りです。

  1. 対象formを取得
  2. formから各質問(Item)を取得
  3. 2で取得できるItemはInterfaceなので、具体的なItemに変換(text項目なら、TextItemなど)
  4. 3のItemから、それぞれの回答を設定
  5. FormResponseに回答をつめて、submitで提出

①対象formを取得

  // formを作成する場合
  const form = FormApp.create('New form');
  form.addTextItem().setTitle('text');
  // 既存のformを使用する場合
  // const existingForm = FormApp.openById('1234567890abcdefghijklmnopqrstuvwxyz');

②formから各質問(Item)を取得

1で取得したFormからItem一覧を取り出します。
取り出したItemはこれ
Itemからは質問のId、順番、タイトル、タイプがなど取得できます。

  // formからItem一覧を配列で取得
  // 型は Item[]
  const formItems = form.getItems();
  // 1要素目を取り出し
  const aItem = formItems[0];

③2で取得できるItemはInterfaceなので、具体的なItemに変換

Itemはインターフェースでなので、具体的なItemに変換します。
ここでは、テキスト項目を追加しているのでTextItemに変換しています。

  // 具体的なItemへ変換
  // 型はTextItem
  const textItem = aItem.asTextItem();

④3のItemから、それぞれの回答を設定

具体的なItemに変換出来たら、createResponse()で回答を設定します。
渡せる引数の形式は、質問の型によって違うので注意が必要です。
以下の質問へのcreateResponse()については、サンプルコードに入っているので参考にしてみてください。

  • 記述式
  • ラジオ
  • チェックボックス
  • プルダウン
  • 均等目盛
  • 日付
  • 時間

どの型のItemでも、createResponse()の戻り値の型はItemResponseになってます。

  // 回答を作成。質問の型によって渡し方が違うので注意
  // 型は ItemResponse
  const textItemResopnse = textItem.createResponse('text resopnse');

⑤FormResponseに回答をつめて、submitで提出

4で作成した回答をFormResponseに設定して、最後にsubmit()して提出します。
1つの質問(Item)につきItemResponseは1つ、1対1関係になっています。
複数の質問項目があるフォームの時は、withItemResponse(ItemResopnse)を複数実行するか、つなげて書くことで2つ以上の項目について回答できます。(つなげて書くほうは試してないです。たぶん動きます。たぶん。)

  // FormResponseを作成
  const formResponse = form.createResponse();
  formResponse.withItemResponse(textItemResopnse);
  /** 複数の時
   * その1
   * formResponse.withItemResponse(ItemResopnse1);
   * formResponse.withItemResponse(ItemResopnse2);
   * formResponse.withItemResponse(ItemResopnse3);
   * 
   * その2
   * formResponse.withItemResponse(ItemResopnse1).withItemResponse(ItemResopnse2).withItemResponse(ItemResopnse3);
   */

  // 提出
  formResponse.submit();

おわりに

GASからGoogleフォームの回答を送信するというテーマで流れの説明とサンプルコードを書いてみました。
意外にも先人がいなかったので、英語のリファレンスを読む羽目になりました。
誰かの助けになれば幸いです。

サンプルコード

この記事で使用したサンプルコード(simpleExample())と、複数の質問項目、質問タイプを使ったサンプル(main())を以下のリポジトリに置いてます。
参考にどうぞ。

参考

Google Apps Script 公式リファレンス
https://developers.google.com/apps-script/reference/forms/form-app

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?