【GAS】フォームの各設問のタイトルや説明文が変更できない|setTitleとsetHelpTextでエラーが発生する場合の対処法

Apps Script apps script GAS-prograshi(プロぐらし)-kv AppsScript
記事内に広告が含まれていることがあります。

Google Form(グーグル フォーム)ではGASを使って各設問の項目や、タイトル、説明文、必須かどうかなどを変更することができます。

各設問のタイトルを変更する「setTitle」と説明文を変更する「setHelpText」を実行したときに、以下のようなエラーが発生することがあります。

setTitleで発生するエラー

Exception: Unexpected error while getting the method or property setTitle on object FormApp.Item.

setHelpTextで発生するエラー

Exception: Unexpected error while getting the method or property setHelpText on object FormApp.Item.


ここではこのエラーの原因と対処法をまとめています。


エラーの原因

このエラーが発生する一番の原因は「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アイテムを動画アイテムとして返します。

(参考)Google Apps Script|Interface Item

タイトルとURLをコピーしました