Googleフォームを自動作成する方法【Googleスプレッドシート×Google Apps Script】

表計算・事務系

こんにちは、せこしょーです。
GoogleスプレッドシートとGoogle Apps Script(GAS)を使って自動でGoogleフォームを作ります。
動画はこちら↓↓

質問_ー.gs

/* 
  質問版Googleフォームを作成する
 */
function createQuestionForm_A() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = ss.getActiveSheet();
  const rows = sheet.getLastRow();
  const columns = sheet.getLastColumn();
  // シートの値を取得
  const values = sheet.getRange(1, 1, rows, columns).getValues();
  // フォーム作成
  const formTitle = Utilities.formatDate(new Date(), "JST", "yyyy/MM/dd_hh:mm:ss_無題のフォーム");
  const form = FormApp.create(formTitle);

  // アイテムを追加する
  for (let i = 0; i < rows - 1; i++) {
    const title = values[i + 1][0];
    const type = values[i + 1][1];
    const required = values[i + 1][2];
    const item = createItem(form, title, type, required);
    let choiceVals = []; // 選択肢を保持するリスト
    for (let j = 0; j < columns - 3; j++) {
      const choiceVal = values[i + 1][j + 3];
      if (choiceVal == "") {
        break
      } else {
        choiceVals.push(choiceVal);
      }
    }
    // アイテムに選択肢を追加する
    if (choiceVals.length != 0 && (type == "ラジオボタン" || type == "チェックボックス" || type == "プルダウン")) {
      item.setChoiceValues(choiceVals);
    }
  }
  Browser.msgBox("マイドライブ直下にフォームを作成しました。");
}

質問_|.gs

/* 
  質問版Googleフォームを作成する
 */
function createQuestionForm_B() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = ss.getActiveSheet();
  const rows = sheet.getLastRow();
  const columns = sheet.getLastColumn();
  // シートの値を取得
  const values = sheet.getRange(1, 1, rows, columns).getValues();
  // フォーム作成
  const formTitle = Utilities.formatDate(new Date(), "JST", "yyyy/MM/dd_hh:mm:ss_無題のフォーム");
  const form = FormApp.create(formTitle);

  // アイテムを追加する
  for (let i = 0; i < columns - 1; i++) {
    const title = values[0][i + 1];
    const type = values[1][i + 1];
    const required = values[2][i + 1];
    const item = createItem(form, title, type, required);
    let choiceVals = []; // 選択肢を保持するリスト
    for (let j = 0; j < rows - 3; j++) {
      const choiceVal = values[j + 3][i + 1];
      if (choiceVal == "") {
        break
      } else {
        choiceVals.push(choiceVal);
      }
    }
    // アイテムに選択肢を追加する
    if (choiceVals.length != 0 && (type == "ラジオボタン" || type == "チェックボックス" || type == "プルダウン")) {
      item.setChoiceValues(choiceVals);
    }
  }
  Browser.msgBox("マイドライブ直下にフォームを作成しました。");
}

クイズ.gs

/* 
  クイズ版Googleフォームを作成する
 */
function createQuizForm() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = ss.getActiveSheet();
  const rows = sheet.getLastRow();
  const columns = sheet.getLastColumn();
  // シートの値を取得
  const values = sheet.getRange(1, 1, rows, columns).getValues();
  // フォーム作成
  const formTitle = Utilities.formatDate(new Date(), "JST", "yyyy/MM/dd_hh:mm:ss_無題のフォーム");
  const form = FormApp.create(formTitle);
  form.setIsQuiz(true);

  // アイテムを追加する
  for (let i = 0; i < rows - 1; i++) {
    const title = values[i + 1][0];
    const type = values[i + 1][1];
    const required = values[i + 1][2];
    const item = createItem(form, title, type, required);
    let choiceVals = []; // 選択肢を保持するリスト
    for (let j = 0; j < columns - 5; j++) {
      const choiceVal = values[i + 1][j + 5];
      if (choiceVal == "") {
        break
      } else {
        choiceVals.push(choiceVal);
      }
    }
    // アイテムに配点を追加する
    const point = values[i + 1][3];
    item.setPoints(point);
    // アイテムに選択肢を追加する
    if (choiceVals.length != 0 && (type == "ラジオボタン" || type == "チェックボックス" || type == "プルダウン")) {
      const correctVal = values[i + 1][4]; //正解の番号
      const choices = [];
      for (let k = 0; k < choiceVals.length; k++) {
        // 選択肢の番号と正解の番号が一致するか判定
        if (String(k + 1) == correctVal) {
          choices.push(item.createChoice(choiceVals[k], true));
        } else {
          choices.push(item.createChoice(choiceVals[k], false));
        }
      }
      item.setChoices(choices);
    }
  }
  Browser.msgBox("マイドライブ直下にフォームを作成しました。");
}

共通.gs

/* 
  Googleフォームのアイテムオブジェクトを返す関数
 */
function createItem(form, title, type, required) {
  if (required != true) {
    required = false
  }
  if (type == "ラジオボタン") {
    return form.addMultipleChoiceItem().setTitle(title).setRequired(required);
  } else if (type == "チェックボックス") {
    return form.addCheckboxItem().setTitle(title).setRequired(required);
  } else if (type == "プルダウン") {
    return form.addListItem().setTitle(title).setRequired(required);
  } else if (type == "記述式") {
    if (title == "メールアドレス") {
      const validationEmail = FormApp.createTextValidation().requireTextIsEmail().build();
      return form.addTextItem().setTitle(title).setRequired(required).setValidation(validationEmail);
    } else {
      return form.addTextItem().setTitle(title).setRequired(required);
    }
  } 
}

コメント