計時器: 0:00
您可以建立自己的 Google 試算表作為打字練習的題庫。請依照以下步驟設定:
<script> // --- 設定區 --- // vvv 請將您發佈的 Google Apps Script 網頁應用程式網址貼在這裡 vvv const gasUrl = "請用您自己的網址取代這裡"; // <--- 就是改這裡 // ^^^ 請將您發佈的 Google Apps Script 網頁應用程式網址貼在這裡 ^^^ // --- 結束設定區 --- ... </script>
// 當網頁透過 GET 方式請求時會執行的主要函式
function doGet(e) {
// 每次被存取時,都先檢查試算表和工作表是否已正確設定
setupSheet();
// 取得所有題庫資料
const data = getQuestionBanks();
// 取得 JSONP 的回呼函式名稱
const callback = e.parameter.callback;
// 如果有回呼函式名稱 (代表是 JSONP 請求),就回傳 JSONP 格式
if (callback) {
return ContentService
.createTextOutput(callback + '(' + JSON.stringify(data) + ')')
.setMimeType(ContentService.MimeType.JAVASCRIPT);
} else {
// 否則,回傳一般的 JSON (加上 CORS 標頭以供其他用途)
return ContentService
.createTextOutput(JSON.stringify(data))
.setMimeType(ContentService.MimeType.JSON)
.withHeaders({
"Content-Type": "application/json; charset=utf-8",
"Access-Control-Allow-Origin": "*",
});
}
}
// 取得所有題庫資料的函式
function getQuestionBanks() {
try {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("題庫");
// 如果工作表不存在或沒有資料,回傳空陣列
if (!sheet || sheet.getLastRow() <= 1) {
return { success: true, data: [] };
}
// 取得工作表中除了標頭以外的所有資料
const data = sheet.getRange(2, 1, sheet.getLastRow() - 1, 2).getValues();
// 將二維陣列轉換為物件陣列,方便前端使用
const questionBanks = data.map(row => {
// 過濾掉沒有名稱或內容的空行
if (row[0] && row[1]) {
return {
name: row[0].toString().trim(),
text: row[1].toString().trim()
};
}
return null;
}).filter(item => item !== null); // 移除空項目
return { success: true, data: questionBanks };
} catch (error) {
// 如果發生錯誤,回傳包含錯誤訊息的物件
return { success: false, message: "讀取試算表時發生錯誤: " + error.message };
}
}
// 初始化設定試算表的函式
function setupSheet() {
const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
const sheetName = "題庫";
let sheet = spreadsheet.getSheetByName(sheetName);
// 如果找不到名為 "題庫" 的工作表,就建立一個並填入範例資料
if (!sheet) {
sheet = spreadsheet.insertSheet(sheetName);
// 設定欄位標頭
const headers = [["題庫名稱", "參照文字"]];
const headerRange = sheet.getRange(1, 1, 1, 2);
headerRange.setValues(headers);
headerRange.setFontWeight("bold"); // 將標頭設為粗體
sheet.setColumnWidth(1, 200); // 設定第一欄寬度
sheet.setColumnWidth(2, 600); // 設定第二欄寬度
// 新增一些範例資料
sheet.getRange(2, 1, 2, 2).setValues([
["範例文章一:岳陽樓記", "慶曆四年春,滕子京謫守巴陵郡。越明年,政通人和,百廢具興。乃重修岳陽樓,增其舊制,刻唐賢今人詩賦於其上。屬予作文以記之。"],
["範例文章二:網路佳句", "我們最大的恐懼不是我們不夠好,我們最大的恐懼是我們超乎想像的能力。我們害怕的不是我們的黑暗面,而是我們的光明面。"]
]);
}
}
為了方便初學者或需要對照注音的學生,本工具提供了特殊的「注音字體」顯示模式。
?f=o 來預設開啟此模式。在 Windows 或 macOS 中,切換中文輸入法後,您可以使用快速鍵 Shift + Space (空白鍵) 來切換全形與半形模式。
建議:進行本打字練習時,為了與參照文字的標點符號格式一致,請務必使用全形模式輸入標點符號。
在中文注音輸入法的全形模式下,您可以透過組合鍵輸入對應的標點符號。常見符號如下:
| 符號 | 名稱 | 方法1 ( ` 系列) |
方法2 ( Ctrl 系列) |
方法3 ( Ctrl+Alt+, 系列) |
|---|---|---|---|---|
| , | 逗號 | ` + , | Ctrl + , | Ctrl+Alt+, 再按 , |
| 。 | 句號 | ` + . | Ctrl + . | Ctrl+Alt+, 再按 m |
| 、 | 頓號 | ` + ' | Ctrl + ' | Ctrl+Alt+, 再按 ' |
| ; | 分號 | ` + ; | Ctrl + ; | Ctrl+Alt+, 再按 ; |
| : | 冒號 | ` + Shift+; | Ctrl + Shift+; | Ctrl+Alt+, 再按 l |
| ? | 問號 | ` + Shift+/ | Ctrl + Shift+/ | Ctrl+Alt+, 再按 / |
| ! | 驚嘆號 | ` + Shift+1 | Ctrl + Shift+1 | Ctrl+Alt+, 再按 k |
| ‧ | 間隔號 | `+.+↓選擇 | Ctrl+.+↓選擇 | Ctrl+Alt+, 再按 . |
| 「『 [【《 | 前引號 夾注號 | `+[+↓選擇 | Ctrl+[+↓選擇 | Ctrl+Alt+, 再按 =,0,o,t,u |
| 」』 ]》】 | 後引號 夾注號 | `+]+↓選擇 | Ctrl+]+↓選擇 | Ctrl+Alt+, 再按 \,-,p,y,i |
| -… →← | 連接號 刪節號 | `+-+↓選擇 | 無 | Ctrl+Alt+, 再按滑鼠點選 |