プロが書く美しいコードじゃない、素人の稚拙なコードだからこそ、得られるものだってきっとある…そんな思いでコードを公開しています。どうぞ生暖かく見守ってください。

【Google Apps Script】でフォームの項目を取り出したけど、Itemって何?

[tool1]フォームをシートに書き出しChatGPTGoogle Apps Script
  • Googleフォームの構造
  • getItems()メソッド
  • Itemtype

前回、Google Apps Scriptを使ってGoogleフォームから質問項目を取り出すことには成功しました。

function myFunction() {

// フォームを開く
const form = FormApp.openByUrl('https://docs.google.com/forms/d/********/edit');

//フォームの要素を配列で取得
const items = form.getItems();

Logger.log(items);
}

出てきた実行ログによると、どうやらフォームの構成要素である項目は一つ一つItemという名前でまとめられているようです。

なので「form.getItems();」で取得したものをそのままスプレッドシートに書き込んだとて、いったい何のことやら?となってしまいます。

Itemの中身を見るためにはどうするのか、先生に聞いてみましょう。

Google Apps Scriptでフォームの項目をgetItems()で取り出しました。 この中にはどんなものがどんな形で含まれていますか?

Google Apps Scriptを使用してフォームの項目をgetItems()メソッドで取得した場合、取得されるオブジェクトは主にGoogle Formsの各項目を表すものです。以下にその概要と一般的な項目の内容を解説します。

getItems()メソッドから返されるのは、フォームの各質問やセクションに対応するアイテムの配列です。この配列の各要素は、フォーム内の各項目に対応しています。

例えば、以下のようなフォームがあるとします:

  1. 名前 (テキスト入力)
  2. 年齢 (数値入力)
  3. 性別 (ラジオボタン)
  4. 質問1 (複数選択肢)
  5. 質問2 (テキストエリア)

getItems()メソッドを使用して取得される各アイテムは、上記のような項目に対応します。具体的な項目の情報を解説します:

  1. 名前 (テキスト入力):
    • タイプ: ItemType.TEXT
    • 質問のテキスト: “名前”
    • ヒント(オプション): なし
  2. 年齢 (数値入力):
    • タイプ: ItemType.LIST
    • 質問のテキスト: “年齢”
    • ヒント(オプション): なし
  3. 性別 (ラジオボタン):
    • タイプ: ItemType.MULTIPLE_CHOICE
    • 質問のテキスト: “性別”
    • 選択肢: [“男性”, “女性”, “その他”]
  4. 質問1 (複数選択肢):
    • タイプ: ItemType.MULTIPLE_CHOICE
    • 質問のテキスト: “質問1”
    • 選択肢: [“選択肢1”, “選択肢2”, “選択肢3”]
  5. 質問2 (テキストエリア):
    • タイプ: ItemType.PARAGRAPH_TEXT
    • 質問のテキスト: “質問2”
    • ヒント(オプション): なし

これらの情報は、フォームの各項目に関する基本的な情報を示しています。Google Apps Scriptを使用して取得した項目情報を活用する際には、アイテムごとに適切な処理を行うためのコードを書くことになります。

すげえな・・・。要するにそれぞれのItemはタイプに分かれていて、タイプによって含まれているものが異なると?

けど、必須項目のオンオフだったり配点だの正解だの、ほかにも取得できないのかしら。

Itemの中に入っているのは、「タイプ」と「質問のテキスト」と「ヒント(オプション)」だけですか?

申し訳ありませんが、誤解が生じてしまいました。Google Apps ScriptのgetItems()メソッドから取得される各アイテムには、もっと多くの情報が含まれています。以下にアイテムオブジェクトに含まれる主な情報を示します:

  1. タイプ (getType()メソッドで取得可能):
    • 項目のタイプを示す値。例えば、テキスト入力、ラジオボタン、複数選択肢など。
  2. タイトル (getTitle()メソッドで取得可能):
    • 項目の質問のテキストやタイトル。
  3. ヒント (getHelpText()メソッドで取得可能):
    • 項目のヒントや追加情報。
  4. 必須 (isRequired()メソッドで取得可能):
    • 項目が必須かどうかを示す真偽値。
  5. 選択肢 (asMultipleChoiceItem().getChoices()などで取得可能):
    • ラジオボタンや複数選択肢の場合、選択肢のリスト。
  6. 行数 (asParagraphTextItem().getRows()で取得可能):
    • テキストエリアなどの場合、行数を示す数値。

など、アイテムの種類によって異なる情報が含まれます。項目の種類や必要な情報に応じて、これらのメソッドを使ってアイテムから情報を取得できます。お手持ちのコードにこれらのメソッドを組み合わせて使うことで、より詳細な情報を取得して活用することができます。

答えがズレていると感じたらすかさず謝罪してくるChatGPT😅

いや、大概はこちらの質問力に問題があるのですよ、むしろごめんなさい。

求めている解答に近くなってきました。どうやら、取得したItemはさらにgetTitle()などのgetなんちゃらを使って一つずつ項目を取得する必要がある、、と。

できれば「主な情報」ではなく「すべて」知りたいなぁ。。

各アイテムに含まれる情報をすべて列挙してもらえますか?

もちろんです。以下に、Google Apps ScriptのgetItems()メソッドから取得される各アイテムに含まれる主な情報をすべて列挙します。

  1. テキスト入力 (ItemType.TEXT):
    • タイプ
    • 質問のテキスト
    • ヒント(オプション)
    • 必須かどうか
  2. 数値入力 (ItemType.LIST):
    • タイプ
    • 質問のテキスト
    • ヒント(オプション)
    • 必須かどうか
  3. ラジオボタン (ItemType.MULTIPLE_CHOICE):
    • タイプ
    • 質問のテキスト
    • ヒント(オプション)
    • 必須かどうか
    • 選択肢

・・・以下中略

  1. 区間区切り (ItemType.SECTION_HEADER):
  • タイプ
  • セクションのタイトル

これらの情報は、各種項目に関する詳細な情報を示しています。必要に応じて、各アイテムからこれらの情報を取得して活用することができます。

主な情報をすべて列挙て、、その時点で矛盾してますやん…笑

主な情報ではなく、すべてが見たいです。

申し訳ございません、理解が誤っていました。Google Apps ScriptのgetItems()メソッドから取得される各アイテムに含まれる情報をすべて列挙いたします。

各アイテムに含まれる情報:

  1. テキスト入力 (ItemType.TEXT):
    • タイプ
    • 質問のテキスト

以下略(前回と全く同じ解答がつ)

はい、ChatGPTさん、お手上げのようです。こうなったらこれ以上の回答は期待できないので別の方法を使って調べる方が良いです。(経験談)

項目についてはやはり公式リファレンスを参考にするのがよさそう。

ただし、カテゴリが多岐にわたっているのでプログラミング初心者にとっては何が何だか…。

とりあえず、ChatGPTさんが教えてくれた以外にも、配点や正解やヒントなど、だいたいの項目は取得できるようです。

ただし、2023年8月現在、質問項目内にある画像項目(「この図を見て答えなさい」というように質問に画像を交えたり、選択肢を画像で選ばせるなど)やテキスト形式で回答させるタイプの正答データなど、一部の項目はGoogle Apps Scriptでは取得できないようです。これらを取得しようと思ったら、APIを使った処理が必要になる…らしい?

とりあえず、取得したItemはタイプ(ラジオボタン?テキストボックス?)によって取得できる情報が異なるようなので、まずはアイテムそれぞれのタイプを判別して、それによって処理の仕方を少しずつ変える必要があるということ。

てか、さっきChatGPTさんがざっと上げただけでもアイテムのタイプ10種類はあったような。。。(執筆時点では実際17タイプ取得できる

完璧なものを目指すと大変なので、まずはよく使いそうな「ラジオボタンタイプ」と「文字入力タイプ」くらいから取得していきましょうか^^;

コメント

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