こんにちは、せこしょーです。
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);
}
}
}
コメント