5
4

[GAS]Googleフォームの初期値を入れたURLを生成する方法

Last updated at Posted at 2023-02-23

はじめに

Googleフォームで回答に初期値を入れたい場合、
「事前入力したURLを取得」というのでURLを取得できます。

が、フォームを作るたびに手作業でURLを生成するのが苦痛だったので、
GASでURLを生成するコードを作成しました。

TL;DR

GoogleFormsのパラメータ付きURLを取得する

function getLink() {
  const form = FormApp.openById(FORM_ID);
  const items = form.getItems();
  const item = items.find(item => { 
    return item.getTitle() == '質問のタイトル';
  });

  const formResponse = form.createResponse();
  // asTextItem()は質問種別によって変える
  const itemResponse = item.asTextItem().createResponse('回答の初期値');
  formResponse.withItemResponse(itemResponse);
  return formResponse.toPrefilledUrl();
}

背景

Googleフォームで回答に初期値を入れる場合、以下のようなパラメータ付きURLで実現できます。

https://docs.google.com/forms/d/e/[FORM_ID]/viewform?usp=pp_url&entry.1265416375=回答の初期値

URLにアクセスするとこのように、回答欄に初期値が埋まります
質問種別

このURLは画面から生成できます。

パターンとしては
entry.[質問ID]=回答の初期値
なので、理屈としては質問ID部分の数字が分かれば良いわけです。

ただし、この数字はフォームを作るたびに変わるので、
一般的には、画面からURLを生成するか、htmlからidを探すか、2択のようです。

1回フォームを作って終わりなら特に問題ないのですが、
諸事情で、多くのGoogleフォームを管理する必要がありました。

(気持ち的に)無理だったので、別の方法を探した所、
GASで同じことが実現できそうだったので作ることにしました。

GASのコード

function getLink() {
  // フォームの設定を取得
  const form = FormApp.openById(FORM_ID);
  const items = form.getItems();
  // 初期値を入れたい質問を選択
  const item = items.find(item => { 
    return item.getTitle() == '質問のタイトル';
  });

  // フォームの回答を生成
  const formResponse = form.createResponse();
  // 記述式の質問項目に対する回答
  const itemResponse = item.asTextItem().createResponse('回答の初期値');
  formResponse.withItemResponse(itemResponse);
  return formResponse.toPrefilledUrl();
}

初めてGoogleフォームのスクリプトを書いたので、ややこしかったのですが、
Googleフォームで、アンケートの設定と回答が分かれているのと同様に
オブジェクトも設定(Form,Item)と回答(FormResponse, ItemResponse)で別のクラスになっているようです。

詳しく知りたい方はドキュメントを読んでみてください。

注意点

↓質問の種別に応じて、asTextItem()の部分は変更してください。
質問種別

試してないですが、getType()で判別できるそうです。

終わり

同じ悩みを抱えている方のお役に立てれば幸いです

5
4
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
5
4