【GAS】大量のGoogle Formをまとめて作成する。


大量のGoogleフォームを作成したい。

クイズ形式の複数のフォームを作成する必要がありました。データソースとなるスプレッドシートはありました。そこでGoogle Apps Scriptでスプレッドシートのデータからフォームを作成してみました。

Google Apps Script スクリプト

const sheetId = "ここにスプレッドシートのファイルを入力してください。";

// スプレッドシートから複数のGoogleフォームを作成するよ。
// 作成するフォームはクイズ形式ですべての設問は4択問題を想定しているよ。
function createMultipleForm(){
  let Spreadsheet = SpreadsheetApp.openById(sheetId);
  let sheets = Spreadsheet.getSheets()

  for (i = 0; i < sheets.length; i++) {

    var sheet = sheets[i]
    var data = sheet.getDataRange().getValues();

    //フォームを新規作成し、フォーム名をスプシのシート名にします。
    var form = FormApp.create(sheet.getName());

    //フォームの設定をします。
    form
      //クイズ形式のフォームにする
      .setIsQuiz(true)
      //フォームのヘッダーに記載する説明文
      .setDescription("テスト用のフォームです。ご回答お願いします!")
      //フォーム回答後に表示するサンキューメッセージ
      .setConfirmationMessage('ご回答ありがとうございます!!')
      //問題をシャッフル
      .setShuffleQuestions(true)
      //回答者のメールアドレスを収集する(点数を回答者に確認させたい場合必須)
      .setCollectEmail(true) 
      //一人につき1回答
      .setLimitOneResponsePerUser(true)
      //サマリーの表示
      .setPublishingSummary(true);



    var lastRow = data.length
    for (j = 1; j < lastRow; j++ ){

      //スプシデータはすべてC列に正解の選択肢が格納されています。このまま使うと正解がすべて選択肢のひとつ目になってしまうのでシャッフルします。
      //フィッシャー・イェーツのシャッフルアルゴリズムにて。
      var array=[[data[j][2],true],[data[j][3],false],[data[j][4],false],[data[j][5],false]];
      for(var k = array.length - 1; k > 0; k--){
        var r = Math.floor(Math.random() * (k + 1))
        var tmp = array[k]
        array[k] = array[r]
        array[r] = tmp
      }

      //フォームに選択肢形式の質問を追加します。
      var item = form.addMultipleChoiceItem();
      //シャッフルした配列を選択肢にセットします。
      item
        //選択肢問題の問題文を設定します。
        .setTitle("次の英文の中のカッコに当てはまる選択肢を選んでください。\n\n" + data[j][1])
        //選択肢問題の選択肢を設定します。
        .setChoices([
          item.createChoice(...array[0]), //ドット三つはスプレッド構文です。「...array」で配列を展開することができます。
          item.createChoice(...array[1]),
          item.createChoice(...array[2]),
          item.createChoice(...array[3]),
        ])
        //選択肢問題の得点を数値で指定します。
        .setPoints(10)
        //回答が必須かどうかを設定します。
        .setRequired(true)
    }
  }
}


詳細はこちらで解説しています。

https://www.teijitaisya.com/gas-create-multiform-from-sheet/