【GAS】Googleフォームの選択肢を変更する:ラジオボタン・プルダウン・チェックボックス
Googleフォームを活用してアンケートや申込フォームを作成する際、選択肢の設定が重要です。Googleフォームでは、ラジオボタン、プルダウン、チェックボックスといった選択肢を用意できます。これらの選択肢は、GAS(Google Apps Script)を使用して動的に変更することが可能です。この記事では、GASを用いてGoogleフォームの選択肢を変更する方法を具体的に解説します。
フォームID
フォームIDはフォームの管理ページ(設定画面)のURLの一部分です。
https://docs.google.com/forms/d/ フォームID /edit
フォームIDが誤ってると次のエラーになります。
Exception: No item with the given ID could be found.
Possibly because you have not edited this item or you do not have permission to access it.
getItems
メソッドとは
getItems
メソッドは、Googleフォーム内の全ての設問(アイテム)を取得するためのメソッドです。このメソッドを使用することで、フォーム内の特定の設問を操作・変更することが可能となります。
function formItems() {
//ご自身のフォームIDに変更する
const formId = "フォームID";
const form = FormApp.openById(formId);
console.log(`form: ${form.getTitle()}`);
const items = form.getItems();
for (const item of items) {
const title = item.getTitle();
const type = item.getType();
const index = item.getIndex();
const itemId = item.getId();
console.log(`●設問${index + 1}`)
console.log(`title: ${title}`);
console.log(`type: ${type}`);
console.log(`itemId: ${itemId}`);
}
}
このメソッドは、フォーム内の全ての設問を FormItem
オブジェクトの配列として返します。各 FormItem
オブジェクトは、具体的なアイテムタイプ(例えば、複数選択、リスト、チェックボックスなど)にキャストして操作することができます。
設問のタイプを指定して取得する
getItems
メソッドの引数としてアイテムタイプを指定することで、特定のタイプのアイテムのみを取得することができます。
例えば、ラジオボタンのアイテムを取得する場合:
const multipleChoiceItems = form.getItems(FormApp.ItemType.MULTIPLE_CHOICE);
アイテムタイプの一覧:
-
FormApp.ItemType.TEXT
- 単一行のテキスト質問 -
FormApp.ItemType.PARAGRAPH_TEXT
- 複数行のテキスト質問 -
FormApp.ItemType.MULTIPLE_CHOICE
- ラジオボタン -
FormApp.ItemType.CHECKBOX
- チェックボックス -
FormApp.ItemType.LIST
- プルダウンリスト -
FormApp.ItemType.SCALE
- スケール(1〜5など) -
FormApp.ItemType.GRID
- グリッド -
FormApp.ItemType.DATE
- 日付 -
FormApp.ItemType.TIME
- 時間
設問(アイテム)の選択肢を動的に変更する
getItemsメソッドで取得した複数の設問(アイテム)から、選択肢を変更する設問(アイテム)を特定して操作をします。設問のタイプ(type: ラジオボタン、チェックボックス、プルダウンリスト)によりキャストするメソッドが変わります。
function updateChoiceValues() {
//変更対象の設問タイトル
const targetTitle = "設問1";
//変更する選択肢文言
const values = ["選択肢A", "選択肢B", "選択肢C", "選択肢D"];
//ご自身のフォームIDに変更する
const formId = "フォームID";
const form = FormApp.openById(formId);
console.log(`form: ${form.getTitle()}`);
const items = form.getItems();
for (const item of items) {
const title = item.getTitle();
const type = item.getType().toString();
//対象以外の設問は処理をスキップする
if (targetTitle !== title) continue;
console.log(`●設問の選択肢を変更する`);
console.log(`title: ${title}`);
console.log(`type: ${type}`);
console.log(values);
//設問のタイプによりメソッドが異なる。
//as<○○○○>Item()で各タイプにキャストして、選択肢を変更する
if (type === "LIST") { //プルダウンリスト
item.asListItem().setChoiceValues(values);
} else if (type === "MULTIPLE_CHOICE") { //ラジオボタン
item.asMultipleChoiceItem().setChoiceValues(values);
} else if (type === "CHECKBOX") { //チェックボックス
item.asCheckboxItem().setChoiceValues(values);
}
}
}
エラー: Exception: Invalid conversion for item type
設問のタイプと異なるas<○○○○>Item()メソッドでキャストをするとエラーに至る。
Exception: Invalid conversion for item type: MULTIPLE_CHOICE.
Exception: Invalid conversion for item type: CHECKBOX.
Exception: Invalid conversion for item type: LIST.
設問のタイプ(type: ラジオボタン、チェックボックス、プルダウンリスト)がどれかによって、キャストのメソッドを変える必要がある。
Discussion