Google Apps ScriptからGoogleフォームの回答を送信する方法です。
GASからフォームの回答を送信する方法について、リファレンスからサンプルコードを起こしたものです。
送信までの流れ
回答を送信するまでの流れは以下の通りです。
- 対象formを取得
- formから各質問(Item)を取得
- 2で取得できるItemはInterfaceなので、具体的なItemに変換(text項目なら、TextItemなど)
- 3のItemから、それぞれの回答を設定
- 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