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


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