請將整理資料為表格,標題欄為題目,選項欄1為是、選項欄2為否,解答欄為答案,並移除括號和題號
請整理為表格,標題欄為題目,選項1欄為 1 選項2欄為 2 選項3欄為 3 選項4欄為 4 ,解答欄為答案,並移除括號和題號
Google 試算表
function onOpen() {
var ui = SpreadsheetApp.getUi(); // 取得 Google 試算表的 UI
// 在功能表中新增一個自訂選單,並設定選單項目
ui.createMenu('🧰 整理選單') // 這是主選單的名稱
.addItem('💡 整理選擇題', 'copyAndMoveDataOnce') // 新增名為"整理題目"的選單,點選後執行copyAndMoveDataOnce
.addItem('📚 整理是非題', 'copyAndMoveDataToBCA') // 新增名為"整理 BC 到 A"的選單,點選後執行copyAndMoveDataToBCA
.addToUi(); // 將選單加到 UI 中
}
function copyAndMoveDataOnce() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet1 = ss.getSheetByName("Wordwall"); // 設定Wordwall
var sheet2 = ss.getSheetByName("GoogleDocs"); // 設定GoogleDocs,如果還沒有創建GoogleDocs,手動創建
// 確認GoogleDocs是否存在,若不存在則創建一個新的
if (!sheet2) {
sheet2 = ss.insertSheet("GoogleDocs");
}
// 取得Wordwall的 A2:E 欄所有資料 (從 A2 開始)
var data1 = sheet1.getRange(2, 1, sheet1.getLastRow() - 1, 5).getValues(); // A2:E最後一行
// 準備要寫入到GoogleDocs的資料
var outputData = [];
for (var i = 0; i < data1.length; i++) {
var aValue = data1[i][0]; // 取得 A 列資料
var rowData = data1[i].slice(1); // 取得 B:E 列資料
// 將資料按指定格式整理到 outputData
outputData.push([aValue]); // A 列的資料 (第 1 次)
for (var j = 0; j < rowData.length; j++) {
outputData.push([rowData[j]]); // 將 B:E 資料依次放入 A 列
}
}
// 清除GoogleDocs的舊資料
sheet2.clear();
// 將整理好的資料一次性寫入GoogleDocs (從 A2 開始)
sheet2.getRange(2, 1, outputData.length, 1).setValues(outputData);
// 新增一個對話框,顯示整理完成的訊息
var ui = SpreadsheetApp.getUi();
ui.alert('資料整理完成!');
}
function copyAndMoveDataToBCA() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet1 = ss.getSheetByName("Wordwall"); // 設定Wordwall
var sheet2 = ss.getSheetByName("GoogleDocs"); // 設定GoogleDocs,如果還沒有創建GoogleDocs,手動創建
// 確認GoogleDocs是否存在,若不存在則創建一個新的
if (!sheet2) {
sheet2 = ss.insertSheet("GoogleDocs");
}
// 取得Wordwall的 A2:C 欄所有資料 (從 A2 開始)
var dataA = sheet1.getRange(2, 1, sheet1.getLastRow() - 1, 1).getValues(); // A 欄資料
var dataBC = sheet1.getRange(2, 2, sheet1.getLastRow() - 1, 2).getValues(); // B2:C 欄資料
// 準備要寫入到GoogleDocs的資料
var outputData = [];
// 將 A 欄、B 欄和 C 欄資料整理為依次排在 A 欄的格式
for (var i = 0; i < dataA.length; i++) {
outputData.push([dataA[i][0]]); // 插入 A 欄的資料
outputData.push([dataBC[i][0]]); // 插入 B 欄的資料
outputData.push([dataBC[i][1]]); // 插入 C 欄的資料
}
// 清除GoogleDocs的舊資料
sheet2.clear();
// 將整理好的資料一次性寫入GoogleDocs (從 A2 開始)
sheet2.getRange(2, 1, outputData.length, 1).setValues(outputData);
// 新增一個對話框,顯示整理完成的訊息
var ui = SpreadsheetApp.getUi();
ui.alert('資料整理完成!');
}
Google 文件
function onOpen() {
var ui = DocumentApp.getUi(); // 取得 Google 試算表的 UI
// 在功能表中新增一個自訂選單,並設定選單項目
ui.createMenu('🧰 匯入表單') // 這是主選單的名稱
.addItem('💡 建立測驗表單', 'createQuizFromActiveDoc') // 新增名為"整理題目"的選單,點選後執行createQuizFromActiveDoc
.addToUi(); // 將選單加到 UI 中
}
function createQuizFromActiveDoc() {
// 提示用戶輸入表單名稱
var ui = DocumentApp.getUi();
var response = ui.prompt('請輸入測驗表單的名稱:', '例如:我的測驗表單', ui.ButtonSet.OK_CANCEL);
// 檢查用戶是否選擇了「確定」
if (response.getSelectedButton() == ui.Button.OK) {
var formName = response.getResponseText();
// 顯示表單建立中的提示(非阻塞式)
var progressDialog = HtmlService.createHtmlOutput('<p>正在建立表單...請稍候。</p>')
.setWidth(300)
.setHeight(100);
ui.showModalDialog(progressDialog, '匯入題目');
// 創建測驗表單
var doc = DocumentApp.getActiveDocument();
var form = FormApp.create(formName);
// 將表單設置為測驗表單
form.setIsQuiz(true);
Logger.log('表單已創建:' + form.getEditUrl());
var body = doc.getBody();
var paragraphs = body.getParagraphs();
var currentQuestion = null;
var options = [];
var correctAnswers = []; // 使用陣列來存儲正確答案
for (var i = 0; i < paragraphs.length; i++) {
var paragraph = paragraphs[i];
var text = paragraph.getText();
var isBold = checkIfBold(paragraph);
// 檢查是否為問題
if (!isListItem(paragraph) && text.trim() !== '') {
if (currentQuestion) {
// 只在 options 不為空的情況下添加問題
if (options.length > 0) {
addQuestionToForm(form, currentQuestion, options, correctAnswers);
} else {
Logger.log('問題 "' + currentQuestion + '" 沒有選項,未添加到表單。');
}
}
// 新問題開始
currentQuestion = text;
options = [];
correctAnswers = []; // 清空正確答案
}
// 檢查選項
else if (isListItem(paragraph)) {
var optionText = text.trim();
options.push(optionText);
// 如果選項是粗體,則設置為正確答案
if (isBold) {
correctAnswers.push(optionText); // 將正確答案加入陣列
}
}
}
// 添加最後一個問題
if (currentQuestion && options.length > 0) {
addQuestionToForm(form, currentQuestion, options, correctAnswers);
}
// 關閉提示視窗
ui.alert('題目匯入完成!您可以在這裡查看表單:\n' + form.getPublishedUrl());
// 自動打開表單分頁
var htmlOutput = HtmlService.createHtmlOutput('<script>window.open("' + form.getPublishedUrl() + '");</script>');
ui.showModalDialog(htmlOutput, '開啟表單');
Logger.log('完成!您可以在這裡查看表單: ' + form.getPublishedUrl());
} else {
Logger.log('未創建表單。用戶取消了操作。');
}
}
// 檢查段落中的文字是否為粗體
function checkIfBold(paragraph) {
var text = paragraph.getText();
var textObj = paragraph.editAsText();
for (var i = 0; i < text.length; i++) {
if (textObj.isBold(i)) {
return true;
}
}
return false;
}
// 檢查段落是否為清單項目
function isListItem(paragraph) {
return paragraph.getType() === DocumentApp.ElementType.LIST_ITEM;
}
// 添加問題到表單
function addQuestionToForm(form, questionText, options, correctAnswers) {
var item;
// 根據正確答案的數量決定題型
if (correctAnswers.length > 1) {
item = form.addCheckboxItem(); // 多選題
} else {
item = form.addMultipleChoiceItem(); // 單選題
}
item.setTitle(questionText);
item.setRequired(true); // 設置為必填題
Logger.log('正在添加問題: ' + questionText);
Logger.log('選項: ' + options.join(', ')); // 添加日誌以顯示收集到的選項
var choices = options.map(function(option) {
return correctAnswers.includes(option)
? item.createChoice(option, true) // 如果是正確答案,則設置為正確選項
: item.createChoice(option);
});
item.setChoices(choices);
}
沒有留言:
張貼留言
歡迎大家一起留言討論!