はじめに
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()
で判別できるそうです。
終わり
同じ悩みを抱えている方のお役に立てれば幸いです