Google Form(グーグル フォーム)ではGASを使って各設問の項目や、タイトル、説明文、必須かどうかなどを変更することができます。
各設問のタイトルを変更する「setTitle」と説明文を変更する「setHelpText」を実行したときに、以下のようなエラーが発生することがあります。
ここではこのエラーの原因と対処法をまとめています。
エラーの原因
このエラーが発生する一番の原因は「setTitle」と「setHelpText」を使うときは、対象のオブジェクト(formItem)を汎用項目から特定のタイプにキャストする必要があるためです。
見慣れない用語が多いのでわかりにくいのですが、例えば、タイトルや説明文を取得するメソッドに「getTitle」と「getHelpText」があります。
これは、汎用項目としてのフォームオブジェクトに対して使用できます。
const formId = "フォームのID";
const form = FormApp.openById(formId);
let ListItem = form.getItems(FormApp.ItemType.LIST)[0];
console.log(ListItem.getTitle());
console.log(ListItem.getHelpText());
※getItems(FormApp.ItemType.LIST)でプルダウンの項目を取得
上記と同じ要領で、「get」を「set」に置き換えるとエラーが発生します。
const formId = "フォームのID";
const form = FormApp.openById(formId);
let ListItem = form.getItems(FormApp.ItemType.LIST)[0];
console.log(ListItem.setTitle());
console.log(ListItem.setHelpText());
つまり、直感的にメソッドを使おうとするとエラーが発生します。
対処法
対処法は「setTitle」と「setHelpText」を使うときは、対象のオブジェクトを「as~」というメソッドを使って対象のタイプにキャストします。
例えば、プルダウンリストの場合は「asListItem()」を、チェックボックスの場合は「asMultipleChoiceItem()」を使います。
const formId = "フォームのID";
const form = FormApp.openById(formId);
let ListItem = form.getItems(FormApp.ItemType.LIST)[0];
console.log(ListItem.asListItem().setTitle());
console.log(ListItem.asListItem().setHelpText());
これでエラーが発生することなく、設問のタイトルと説明文を変更することができます。
Googleフォームで使用できる「as~」系のメソッドは以下になります。
メソッド | 戻り値の型 | 概要 |
---|---|---|
asCheckboxGridItem() | CheckboxGridItem | アイテムをチェックボックス グリッド アイテムとして返します。 |
asCheckboxItem() | CheckboxItem | アイテムをチェックボックス アイテムとして返します。 |
asDateItem() | DateItem | アイテムを日付アイテムとして返します。 |
asDateTimeItem() | DateTimeItem | アイテムを日時アイテムとして返します。 |
asDurationItem() | DurationItem | アイテムを期間アイテムとして返します。 |
asGridItem() | GridItem | アイテムをグリッド アイテムとして返します。 |
asImageItem() | ImageItem | アイテムを画像アイテムとして返します。 |
asListItem() | ListItem | アイテムをリストアイテムとして返します。 |
asMultipleChoiceItem() | MultipleChoiceItem | 多肢選択式アイテムとしてアイテムを返します。 |
asPageBreakItem() | PageBreakItem | アイテムを改ページアイテムとして返します。 |
asParagraphTextItem() | ParagraphTextItem | アイテムを段落テキスト アイテムとして返します。 |
asScaleItem() | ScaleItem | アイテムを体重計アイテムとして返します。 |
asSectionHeaderItem() | SectionHeaderItem | アイテムをセクション ヘッダー アイテムとして返します。 |
asTextItem() | TextItem | アイテムをテキスト アイテムとして返します。 |
asTimeItem() | TimeItem | アイテムを時間アイテムとして返します。 |
asVideoItem() | VideoItem | アイテムを動画アイテムとして返します。 |