
前言:「行政減量」—— 這不僅是教育政策的口號,更是無數第一線教師內心最深切的期盼。
您是否也感同身受?每日的教學熱情,正一點一滴-地被淹沒在無盡的行政庶務中:批改作業後的成績登錄、繁瑣的班級通知、協調家長會的時程、追蹤學生的作業繳交狀況……這些工作雖然必要,卻佔據了您備課、研究教學、甚至與學生深入互動的寶貴時間。
我們總在等待政策由上而下地落實,但如果有一種方法,能讓您由下而上、立刻為自己實現「行政減量」,您是否願意嘗試?
這個強大的工具,就內建在您每天使用的 Google Workspace 中。它不需要學校採購昂貴的軟體,也不需要您成為頂尖的程式設計師。它,就是 Google Apps Script (GAS)。這篇文章,將是您奪回教學專注力、實現真正行政減量的完整實戰手冊。
本文目錄
Part 1: 重新認識 GAS - 您響應「行政減量」的最佳利器
簡單來說,Google Apps Script (GAS) 是整個 Google 教育工具的「中央神經系統」。它就像一位聽得懂指令的數位助理,您只要用簡單的程式碼(基於 JavaScript)告訴它要做什麼,它就能指揮 Google Sheets、Forms、Gmail、Calendar 等工具,自動化地協同作業。
為什麼 GAS 是實現「行政減量」的關鍵?
- 真正實現行政減量:這是 GAS 最核心的價值。它能將瑣碎、重複的行政工作(如成績登錄、通知寄發、資料彙整)交給腳本,讓您從表單與公文的循環中解放,找回教學的初心與熱情。
- 釋放寶貴教學時間:將評分回饋、活動報名、資料追蹤等工作自動化,把時間還給課程設計與和學生的深度互動。
- 提升親師溝通效率:自動化處理家長會談安排、成績報告,讓溝通更即時、更到位,且有據可查,減少來回溝通的隱形成本。
- 數據驅動的教學決策:自動彙整學生的學習數據,讓您一目了然地掌握班級狀況,將時間花在「分析」而非「整理」數據上。
- 零成本導入:只要有 Google 帳號就能免費使用,讓行政減量不再需要等待大筆預算,每位老師都能立即開始。
Part 2: GAS 的 10 個殺手級「行政減量」應用場景
讓我們看看 GAS 如何在真實的校園情境中,將行政減量的口號化為具體行動。
【教學與班級經營應用】
案例 1:半自動化作業評分與回饋系統
GAS 減量方案:在 Google Sheets 中填寫分數與評語代碼後,點擊「一鍵寄送回饋」。
function sendFeedbackEmails() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("成績單");
const data = sheet.getDataRange().getValues();
const feedbackTemplates = {
"1": "表現優異,請繼續保持!",
"2": "觀念正確,但細節可以更小心。",
"3": "仍需努力,請找時間與老師討論。"
};
for (let i = 1; i < data.length; i++) {
const [studentName, studentEmail, score, feedbackCode] = data[i];
const subject = `關於您本次作業的回饋`;
const message = `${studentName} 同學您好,\n\n您本次的成績為 ${score} 分。\n老師的評語:${feedbackTemplates[feedbackCode.toString()]}\n\n希望您繼續努力!`;
GmailApp.sendEmail(studentEmail, subject, message);
}
}
案例 2:個人化學習路徑小幫手
GAS 減量方案:根據線上前測成績,系統自動寄發不同等級的學習資源連結。
function assignLearningPath(e) {
const formResponse = e.response;
const userEmail = formResponse.getRespondentEmail();
const score = formResponse.getItemResponses()[0].getResponse();
let subject = "您的個人化學習建議";
let message;
if (score >= 90) {
message = "恭喜您獲得高分!推薦您挑戰以下進階資源:[進階資源連結]";
} else if (score >= 60) {
message = "您的基礎穩固,請透過以下資源鞏固學習:[鞏固資源連結]";
} else {
message = "別氣餒,請先觀看以下基礎教學影片,老師會再關心您:[基礎教學連結]";
}
GmailApp.sendEmail(userEmail, subject, message);
}
案例 3:智慧作業/閱讀心得繳交追蹤器
GAS 減量方案:在繳交截止日當晚 10 點自動執行,找出未交者並寄出催繳信。
function checkSubmissionsAndRemind() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("作業繳交總表");
const data = sheet.getDataRange().getValues();
for (let i = 1; i < data.length; i++) {
const [studentName, studentEmail, submissionStatus] = data[i];
if (submissionStatus !== "已繳交") {
const subject = "作業繳交通知提醒";
const message = `${studentName} 同學您好,提醒您本次作業尚未繳交,請盡快完成。`;
GmailApp.sendEmail(studentEmail, subject, message);
}
}
}
案例 4:公平且具記錄的課堂隨機點名器
GAS 減量方案:建立「隨機抽一位」的自訂選單,點擊後不僅顯示姓名,更自動記錄次數。
function onOpen() {
SpreadsheetApp.getUi()
.createMenu('課堂工具')
.addItem('隨機抽一位', 'randomStudentPicker')
.addToUi();
}
function randomStudentPicker() {
const sheet = SpreadsheetApp.getActiveSheet();
const students = sheet.getRange("A2:A31").getValues();
const randomIndex = Math.floor(Math.random() * students.length);
const selectedStudent = students[randomIndex][0];
const countCell = sheet.getRange(randomIndex + 2, 2);
const currentCount = countCell.getValue() || 0;
countCell.setValue(currentCount + 1);
SpreadsheetApp.getUi().alert(`抽中的是: ${selectedStudent}`);
}
案例 5:學生行為與正向表現即時記錄器
GAS 減量方案:老師用手機表單提交,GAS 自動將紀錄彙整到總表。
function logStudentBehavior(e) {
const itemResponses = e.response.getItemResponses();
const studentId = itemResponses[0].getResponse();
const eventType = itemResponses[1].getResponse();
const description = itemResponses[2].getResponse();
const timestamp = new Date();
const logSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("學生行為總紀錄");
logSheet.appendRow([timestamp, studentId, eventType, description]);
}
【學校行政與親師溝通應用】
案例 6:全自動家長會談預約系統
GAS 減量方案:家長選擇時段後,GAS 自動預約並將該時段從選項中移除。
function processAppointment(e) {
const form = FormApp.getActiveForm();
const selectedTime = e.response.getItemResponses()[0].getResponse();
// ... (此處應有程式碼在 Calendar 上建立活動) ...
const timeQuestion = form.getItems(FormApp.ItemType.LIST)[0].asListItem();
const choices = timeQuestion.getChoices();
const newChoices = choices.filter(choice => choice.getValue() !== selectedTime);
timeQuestion.setChoices(newChoices);
}
案例 7:校外教學報名與通知單自動化管理
GAS 減量方案:家長報名後,GAS 自動生成客製化的同意書並寄出。
function generatePermissionSlip(e) {
const studentName = e.response.getItemResponses()[0].getResponse();
const parentEmail = e.response.getRespondentEmail();
const templateId = "YOUR_TEMPLATE_DOC_ID";
const newDocFile = DriveApp.getFileById(templateId).makeCopy(`家長同意書 - ${studentName}`);
const newDoc = DocumentApp.openById(newDocFile.getId());
newDoc.getBody().replaceText("{{學生姓名}}", studentName);
newDoc.saveAndClose();
GmailApp.sendEmail(parentEmail, "校外教學家長同意書", `請查收附件的同意書。`, {
attachments: [newDocFile.getAs(MimeType.PDF)]
});
}
案例 8:一鍵生成代課老師交接包
GAS 減量方案:老師在線上表單打勾,系統自動彙整資料寄給相關人員。
function onEdit(e) {
const range = e.range;
if (range.getColumn() == 2 && range.getValue() == true) {
const sheet = e.source.getActiveSheet();
const teacherName = sheet.getRange(range.getRow(), 1).getValue();
const lessonPlanLink = sheet.getRange(range.getRow(), 3).getValue();
const officeEmail = "office@myschool.edu.tw";
const subject = `${teacherName} 老師代課交接資料`;
const body = `這是 ${teacherName} 老師的代課資料,課程計畫連結:${lessonPlanLink}`;
GmailApp.sendEmail(officeEmail, subject, body);
range.setValue(false);
}
}
案例 9:圖書館圖書逾期自動提醒系統
GAS 減量方案:設定每日自動運行的腳本,主動找出逾期紀錄並寄信通知導師。
function libraryOverdueReminder() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("借閱紀錄");
const data = sheet.getDataRange().getValues();
const today = new Date();
for (let i = 1; i < data.length; i++) {
const [bookTitle, studentName, , dueDate, status, teacherEmail] = data[i];
if (status !== "已歸還" && new Date(dueDate) < today) {
GmailApp.sendEmail(teacherEmail, "圖書逾期提醒", `貴班 ${studentName} 同學借閱的《${bookTitle}》已逾期。`);
}
}
}
案例 10:校園公告多平台一鍵發布
GAS 減量方案:在單一地點輸入公告,GAS 自動同步到所有指定平台。
function distributeAnnouncement(e) {
const announcement = e.value;
const teacherList = "all-teachers@myschool.edu.tw";
const chatWebhookUrl = "YOUR_GOOGLE_CHAT_WEBHOOK_URL";
GmailApp.sendEmail(teacherList, "【重要公告】", announcement);
const payload = JSON.stringify({ "text": announcement });
const options = {
"method": "post",
"contentType": "application/json",
"payload": payload
};
UrlFetchApp.fetch(chatWebhookUrl, options);
}
Part 2.5: GAS 的魔法核心 - 串連 Google 工具,打造校園自動化工作流
前面的案例讓我們看到了 GAS 的各種可能性,但它最強大的地方,在於能將這些獨立的功能串連起來,形成一個完整的、無人干預的「自動化工作流」。就像多米諾骨牌,第一個動作觸發後,後續所有流程將自動完成。
以下,我們將深入拆解三個校園真實情境,看 GAS 如何指揮 Google 各項工具協同作戰。
工作流一:新生入學全自動化流程
- 目標:新生完成報到後,系統自動為其建立數位檔案、安排迎新活動、並通知所有相關單位。
- 參與工具:
Google Forms→Google Sheets→Google Drive→Google Docs→Google Calendar→Gmail
自動化流程詳解:
- 資訊入口 (
Google Forms):行政同仁將新生的基本資料填入一個「新生報到表單」。 - 數據中心 (
Google Sheets):表單提交後,所有資料自動存入「新生總表」。【GAS 指揮部啟動】 - 建立個人檔案庫 (
Google Drive&Google Docs):GAS 指揮DriveApp建立專屬資料夾,並指揮DocumentApp複製一份「新生觀察紀錄表」範本,填入資料後存檔。 - 安排迎新活動 (
Google Calendar):GAS 指揮CalendarApp在「學校輔導室」的行事曆上,建立個人化的迎新座談活動,並邀請家長與老師。 - 多方自動通知 (
Gmail):GAS 指揮GmailApp,分頭寄送歡迎信給家長、通知信給班導師、以及任務信給資訊組長。
成果:原本需要多方手動協調,耗時至少半天的流程,現在只需要一次表單提交,在 30 秒內自動完成所有數位建檔與通知作業。
工作流二:校內社團線上申請與審核流程
- 目標:學生線上申請社團,申請單自動發送給指導老師審核,審核結果再自動通知學生,全程無紙化。
- 參與工具:
Google Forms→Google Sheets→Gmail→(GAS Web App)
自動化流程詳解:
- 學生申請 (
Google Forms):學生填寫「社團申請表」。 - 紀錄申請 (
Google Sheets):申請資料存入「社團申請總表」。【GAS 指揮部啟動】 - 發送審核通知 (
Gmail):GAS 寄一封包含「【點此批准】」和「【點此駁回】」特製連結的審核信給指導老師。 - 老師一鍵審核 (
GAS Web App):老師點擊連結,觸發一個部署為「網路應用程式」的 GAS 腳本,回傳審核指令。 - 更新狀態並通知結果 (
Google Sheets&Gmail):GAS 收到指令後,更新試算表中的審核狀態,並寄發最終結果通知信給學生。
成果:將傳統需要列印、跑流程簽名的過程,變為全線上的自動化流程,所有紀錄皆永久保存在雲端,輕鬆實現行政減量。
Part 3: 新手入門:打造您的第一個「低分自動提醒」減量工具
看了這麼多強大的工作流,是不是也想動手試試看了呢?讓我們從一個簡單卻能立即展現行政減量價值的工具開始。
步驟一:準備您的成績單 (Google Sheets)
- 開啟一個新的 Google Sheets 檔案。
- 建立至少四個欄位標題:「學生姓名」、「家長 Email」、「最新小考成績」、「通知狀態」。
步驟二:進入 Apps Script 編輯器
- 點擊上方選單的「擴充功能」 (Extensions)。
- 選擇「Apps Script」。
步驟三:貼上魔法程式碼
您會看到一個程式碼編輯器的畫面。請將裡面的內容全部刪除,然後貼上以下程式碼:
// 這是一個特殊的函式,只要這個試算表有任何編輯,它就會自動執行
function onEdit(e) {
const sheet = e.source.getActiveSheet();
const range = e.range;
// 檢查被編輯的是不是「最新小考成績」欄 (C欄),且不是第一行標題
if (range.getColumn() == 3 && range.getRow() > 1) {
const score = range.getValue();
if (score < 60) {
const studentName = sheet.getRange(range.getRow(), 1).getValue();
const parentEmail = sheet.getRange(range.getRow(), 2).getValue();
const statusCell = sheet.getRange(range.getRow(), 4);
if (statusCell.getValue() != '已通知') {
const subject = `${studentName} 的學習狀況提醒`;
const message = `親愛的家長您好,\n\n提醒您,${studentName} 在本次小考的成績為 ${score} 分,需要您多加關心與鼓勵。\n\n建議您可以與孩子聊聊,了解他/她是否在學習上遇到了困難。學校方面,我也會特別關注,並提供必要的協助。\n\n祝 安康\n\n[您的姓名] 老師 敬上`;
GmailApp.sendEmail(parentEmail, subject, message);
statusCell.setValue('已通知');
}
}
}
}
步驟四:儲存與授權
- 點擊編輯器上方像「磁碟片」圖示的「儲存專案」按鈕。
- 這一步非常重要:因為這個腳本需要寄送 Email 的權限,您需要手動執行一次來授權。點擊上方的「執行」按鈕。
- 此時會跳出一個「需要授權」的視窗。請跟隨指示,選擇您的 Google 帳號,點擊「進階」 > 「前往『(專案名稱)』(不安全)」,並在下個頁面點擊「允許」,授予腳本存取您資料的權限。(這是標準流程,因為是您自己寫的腳本,所以是安全的)。
步驟五:實際測試
- 回到您的成績單試算表。
- 在「家長 Email」欄位填上您自己的 Email 以便測試。
- 然後,在「最新小考成績」欄位輸入一個低於 60 的數字,例如
55,然後按下 Enter。
幾秒鐘後,去檢查您的信箱,應該就會收到一封來自您自己的提醒信了!同時,試算表上同一行的「通知狀態」欄也會自動變為「已通知」。
完成後,您就親手打造了一個 24 小時工作的「親師溝通助理」。每一次的自動通知,都是一次成功的行政減量。
Part 4: 邁向進階之路 - 讓您的腳本更強大穩定
當您熟悉了基本操作後,可以探索以下技巧,讓您的自動化腳本更上一層樓,這也是行政減量能否規模化的關鍵。
1. 深入了解「觸發器 (Triggers)」
觸發器是自動化的心臟。除了我們在教學中用到的簡易觸發器 onEdit(),您應該學會使用「可安裝觸發器」:
- 時間驅動 (Time-driven):最常用於排程任務。例如設定「圖書館逾期提醒」腳本在每天早上 8 點自動執行。
- 事件驅動 (Event-driven):如 `On form submit`,這是處理 Google Forms 回覆最強大的方式,比 `onEdit` 更穩定可靠。
2. 打造自訂介面 (HTML Service)
GAS 不僅能在後端運作,還能使用標準的 HTML、CSS 和 JavaScript 建立圖形化介面,例如自訂的彈出視窗或側邊欄。
3. 學會處理錯誤 (Error Handling)
當您的腳本處理大量資料時,錯誤在所難免。`try...catch` 語法可以讓您的腳本更加「健壯」,即使遇到單筆資料問題,也能繼續完成其他任務。
try {
// 嘗試執行這段程式碼
GmailApp.sendEmail(invalidEmail, "主旨", "內容");
} catch (e) {
// 如果 try 區塊發生錯誤,就執行這裡
Logger.log(`寄信失敗:${e.toString()},收件人:${invalidEmail}`);
}
4. 撰寫可維護的程式碼
當您的腳本越來越複雜時,良好的撰寫習慣至關重要:加上註解、使用有意義的變數名稱、集中管理設定等。
Part 5: 結論:用科技賦能教學,響應「行政減量」從我做起
「行政減量」不應只是被動等待的政策,它更可以是一種主動出擊的思維。Google Apps Script 賦予了每位老師實踐這種思惟的能力。
從簡單的範例程式碼,到跨工具的複雜工作流,再到讓腳本更穩健的進階技巧,您已經看到了這項工具的巨大潛力。它讓我們能將那些不具創造性、卻佔據大量時間的行政工作,交給最擅長處理重複任務的電腦腳本。這不僅是為了奪回寶貴的時間,更是為了找回身為教育者的專業與熱情,讓我們能將心力重新聚焦在每一個獨一無二的學生身上。
今天,就從您教學或行政工作中最繁瑣、最重複的一件事開始思考吧。花一點時間,複製一段範例程式碼,修改成您需要的樣子。您的每一次成功,不僅是個人的效率提升,更是對「行政減量」最鏗鏘有力的響應。
請先 登入 以發表留言。