Automation
Google Workspace+GAS 自動化零基礎入門
用 Google Apps Script 把 Gmail、雲端硬碟、表單、試算表串成自動流程。賴家榮零基礎入門:看懂工具、拆解流程、做出第一個自動化。附完整簡報下載。
閱讀知識
把會議逐字稿交給 Gemini,讓它抓出所有待辦事項的「負責人、任務、期限」,再用 Apps Script 一列一列寫進 Google 試算表。
會議裡最容易蒸發的就是待辦:「這件事你來」「下週三前給我」,講完就散了,事後常常沒人記得。這篇教學讓 Gemini 幫你把這些待辦從逐字稿裡挑出來,整整齊齊排進試算表,之後要追蹤、要分派都有依據。
待辦如果只留在會議記錄的一段文字裡,很難追蹤。誰負責、什麼時候要交,散在段落中間,過幾天就模糊了。把待辦拆成「一筆一列」放進試算表,每一項都有負責人和期限欄位,你可以排序、篩選、加上狀態,整個團隊看同一張表,責任清清楚楚。
而讓 Gemini 來做萃取,是因為它讀得懂口語。逐字稿裡的待辦常常講得很鬆散,「那個就麻煩你囉」「記得下週處理」,人要一句一句挑很累,Gemini 能理解語意、補上結構。搭配 SpreadsheetApp 直接寫進 Google 試算表,資料落地就能協作,不用再手動謄一次。
動作新建一份 Google 試算表,第一列先打好欄位標題:負責人、任務、期限、狀態。
常見地雷記下這份試算表的網址,程式要用到中間那段 ID。
動作到 aistudio.google.com 建立 API 金鑰並複製。
常見地雷金鑰只完整顯示一次,先貼到安全的地方存好。
動作打開 script.google.com 建新專案,清空預設函式。
常見地雷取個好認的名字,例如「會議待辦萃取」。
動作在「專案設定→指令碼屬性」新增 GEMINI_API_KEY,值貼上金鑰。
常見地雷名稱大小寫要完全一致,不能有多餘空格。
動作把下方第一段程式碼原封不動貼進編輯器。
常見地雷共用工具,網址與參數都別改。
動作貼上第二段 extractActionItems,把 SHEET_ID 換成你的試算表 ID,並把逐字稿貼進 transcript 變數。
常見地雷試算表 ID 是網址 /d/ 與 /edit 之間那一串,別貼整段網址。
動作選 extractActionItems 按執行,第一次授權允許讀寫試算表與連外。
常見地雷未驗證提示點「進階→前往」繼續即可。
動作回到試算表,待辦應該一列一列填進去了,檢查負責人與期限是否正確。
常見地雷若沒資料,先看執行紀錄,通常是 ID 打錯或 Gemini 回傳格式異常。
第一段是共用的 askGemini 函式,把文字送給 Gemini 並取回回覆,請原封不動貼上。
function askGemini(prompt) {
const key = PropertiesService.getScriptProperties().getProperty('GEMINI_API_KEY');
const url = 'https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent?key=' + key;
const payload = { contents: [{ parts: [{ text: prompt }] }] };
const res = UrlFetchApp.fetch(url, { method:'post', contentType:'application/json', payload: JSON.stringify(payload), muteHttpExceptions:true });
return JSON.parse(res.getContentText()).candidates[0].content.parts[0].text.trim();
}
第二段是主流程。它請 Gemini 用 JSON 陣列回傳待辦(每筆含 owner、task、due),再用 SpreadsheetApp 逐筆 appendRow 寫進試算表。找不到負責人或期限時,會填「未指定」,方便你後補。
function extractActionItems() {
const SHEET_ID = '你的試算表ID'; // 換成你的試算表 ID
const transcript = '把會議逐字稿貼在這裡'; // 換成逐字稿內容
const prompt = '你是專案助理。請從以下會議逐字稿中,找出所有的待辦事項。' +
'只回傳 JSON 陣列,不要任何說明或 markdown 標記,格式為:' +
'[{"owner":"負責人","task":"要做的事","due":"期限"}]。' +
'找不到負責人或期限時,該欄填「未指定」。逐字稿如下:\n\n' + transcript;
let raw = askGemini(prompt);
raw = raw.replace(/```json/g, '').replace(/```/g, '').trim();
const items = JSON.parse(raw);
const sheet = SpreadsheetApp.openById(SHEET_ID).getSheets()[0];
items.forEach(function(it) {
sheet.appendRow([it.owner, it.task, it.due, '待處理']);
});
Logger.log('已寫入 ' + items.length + ' 筆待辦事項。');
}
流程的重點是把「口語的待辦」轉成「結構化的資料列」。逐字稿是輸入,一張可追蹤的待辦表是輸出。因為每筆都有負責人和期限欄位,會後你不用再靠記憶,打開表格就知道誰欠什麼。
有可能,因為它是靠理解語意在判斷。逐字稿裡講得明確的待辦通常抓得很準,講得含糊的(例如只是隨口提一句)就可能漏掉或誤判。建議把它當成「先幫你列出九成」,寫進表格後你快速掃一遍,補上漏的、刪掉多的,會比從零整理省很多力。
看逐字稿有沒有足夠線索。如果逐字稿裡有講者標記或前後文提到本名,Gemini 通常能對應。若只有含糊的「你」「他」,就可能填成未指定。想更準,可以在逐字稿開頭附一份與會者名單,或在 prompt 裡告訴 Gemini 有哪些人參與。
這很正常,因為會議上不一定每件事都講明期限。程式已經設計成找不到就填「未指定」,不會出錯。你可以在表格裡把未指定的項目挑出來,會後補上真正的期限,或直接請負責人回報,反而形成一個檢查缺漏的好時機。
打開你的 Google 試算表,網址會像 docs.google.com/spreadsheets/d/xxxxx/edit,中間那串 xxxxx(在 /d/ 和 /edit 之間)就是試算表 ID。複製那一段貼到程式的 SHEET_ID,不要貼整個網址,否則程式打不開試算表。
不會,這篇用的是 appendRow,也就是「往後面新增一列」,舊資料都保留。不過連跑兩次同一份逐字稿會有重複資料。想避免重複,可以在寫入前先清空資料區、或比對既有任務只補新的,看你的使用習慣選一種。
可以。把逐字稿改成從另一份試算表的某一欄逐列讀入,用迴圈跑每一場,並在每筆待辦多寫一個會議名稱欄位。這樣所有會議的待辦會匯進同一張大表,方便統一追蹤。注意 API 有速率限制,量大時每次呼叫間加一點延遲比較保險。
因為 JSON 有固定欄位,程式才能穩定地把每一筆拆成試算表的一列一欄。如果只是純文字清單,程式很難準確切出哪段是負責人、哪段是期限。請 Gemini 回傳 JSON,就等於先講好「格式」,資料進表格才不會錯位。
程式裡已經先把 markdown 的程式碼標記去掉,處理掉最常見的狀況。若仍偶爾失敗,可以在 prompt 裡再強調「只回傳純 JSON、不要任何多餘文字」,或加一段 try/catch,失敗時記錄下原始回應方便你排查,甚至自動重試一次。
逐字稿會送到 Gemini API 做處理,這點跟使用任何雲端 AI 服務一樣。若內容涉及機密,建議先評估公司政策,或把敏感資訊(如客戶名、金額)先去識別化再送。程式本身跑在你自己的 Google 帳號裡,資料存在你自己的試算表,金鑰也收在指令碼屬性,這幾層是安全的。
可以,這正是很自然的下一步。寫進試算表後,再加一段用 GmailApp 依負責人 email 寄出各自的待辦,或設定期限前一天的提醒。把待辦萃取、寫表、通知串成一條龍,會後就完全不用手動追人,是很多團隊最想要的自動化。
當待辦不再散在腦袋和聊天紀錄,而是整齊落在一張大家都看得到的表上,追蹤和分派就變得輕鬆。學會萃取待辦之後,再接上自動提醒、自動寄信,你的會議流程就能從「開完就忘」進化成「事情自己會被追」。
想讓團隊用 AI+自動化把重複工作交給流程?賴家榮提供 Workspace/GAS/Gemini 企業內訓與大學課程。
預約授課・免費諮詢本文為賴家榮 AI 教學中心原創教學內容;想讓團隊學會用 AI,歡迎看AI 課程或預約授課 →
代表圖片來源:圖片來源:Pexels