GASでGoogleフォームの質問の詳細(選択肢など)を取得する

Googleフォームの質問の内容を細かく取得する方法のメモです。

質問のタイトルや説明文を取得するのは簡単なのですが、チェックボックスやラジオボタンの選択肢グリッド型のチェックボックス・ラジオボタンの行・列の項目名を取得するのに少し手間取ったので、記録として・・・。

function getFormQuestions() {
  // フォームを取得
  const form = FormApp.openById("フォームのID")
  // フォーム内の全アイテム(質問および画像・動画・セクションなど・・・)を取得
  const items = form.getItems()

  for (const item of items) {
    // アイテムの基本的な情報
    console.log(item.getIndex())      // 何番目のアイテムかがわかる
    console.log(item.getId())         // アイテムのID。回答データと紐づける時に使える
    console.log(item.getTitle())      // アイテムのタイトル
    console.log(item.getHelpText())   // アイテムの説明文
    Logger.log(item.getType())        // アイテムのタイプ(記述式、チェックボックス・・・等)を判別できる

    // アイテムのタイプによって取得できる情報が異なるので分岐する
    switch (item.getType()){
      // ※ チェックボックス・ラジオボタン・プルダウンは、選択肢を取得できる
      // チェックボックス
      case FormApp.ItemType.CHECKBOX:
        getChoicesValues(item.asCheckboxItem().getChoices())
        break
      // ラジオボタン
      case FormApp.ItemType.MULTIPLE_CHOICE:
        getChoicesValues(item.asMultipleChoiceItem().getChoices())
        break
      // プルダウン
      case FormApp.ItemType.LIST:
        getChoicesValues(item.asListItem().getChoices())
        break
      // ※ チェックボックスおよびラジオボタンのグリッドは、行・列の項目名が取得できる
      // チェックボックスのグリッド
      case FormApp.ItemType.CHECKBOX_GRID:
        getRowsAndColumns(item.asCheckboxGridItem())
        break
      // ラジオボタンのグリッド
      case FormApp.ItemType.GRID:
        getRowsAndColumns(item.asGridItem())
        break
      // スケールは、最低値と最大値およびそれらのラベルが取得できる
      case FormApp.ItemType.SCALE:
        const scaleItem = item.asScaleItem()
        console.log(scaleItem.getLowerBound())   // 最低値
        console.log(scaleItem.getUpperBound())   // 最大値
        console.log(scaleItem.getLeftLabel())    // 左側ラベル
        console.log(scaleItem.getRightLabel())   // 右側ラベル
        break
    }
  }
}

// 各選択肢を取得
function getChoicesValues(choices) {
  for (const choice of choices){
    console.log(choice.getValue())
  }
}

// 行、列の項目名を取得
function getRowsAndColumns(item) {
  console.log(item.getRows())
  console.log(item.getColumns())
}

item.getType()で質問のタイプ(CHECKBOX, LIST… など)を取得し、そのタイプに適した方法で詳細を取得します。

コメント