魔鬼藏在細節裡:為什麼我的自動化腳本失靈了?
當你把上一章的「自動群發薪資條」腳本運用到公司實戰中,大家都對你投以崇拜的眼光。你甚至把腳本設定了「每個月 5 號早上 9 點自動執行 (Triggers)」,以為從此可以高枕無憂。
結果到了下個月 5 號的早上,你一進辦公室,發現大家都在抱怨:「為什麼我收到的薪資條,時間寫的是 4 號晚上?而且裡面的金額全部都是上一筆的舊資料?」
這就是所有自動化工程師都會遇到的經典噩夢:時區錯亂與快取 (Cache) 延遲。 在 GAS (Google Apps Script) 這個雲端世界裡,由於 Google 的伺服器散佈在全世界,它預設的運作方式可能跟你「肉眼看到的表單」不一樣。如果你不了解這些隱藏的坑點,你的自動化系統就會變成一顆不定時炸彈。
坑點一:迷失在太平洋的時區 (Timezone) 問題
當你在 GAS 裡面使用 JavaScript 內建的 new Date() 函數想要取得「今天的日期」時,你可能會驚訝地發現,印出來的時間竟然少了 8 個小時!或者是少了好幾天。
這是因為 GAS 的伺服器預設通常是 美東時間 (EST) 或是 太平洋標準時間 (PST),而不是我們台灣所在的 台北時間 (GMT+8)。
Vibe Prompt 除錯法:強制校正時區
要解決這個問題,我們絕對不能自己去寫 時間加 8 小時 這種容易出錯的蠢程式。我們應該使用 Google 內建的 Utilities.formatDate 神器。
【GAS 時區校正 Prompt】 我正在撰寫 Google Apps Script。 我想要取得今天的日期與時間,並把它寫入試算表的 A1 儲存格中。 但是我發現
new Date()印出來的時間不是台灣時間。 請幫我寫一段程式碼,利用Utilities.formatDate將現在的時間強制格式化為台灣時間 (Asia/Taipei)。 輸出的格式請設定為:YYYY-MM-DD HH:mm:ss。
AI 產出的校正代碼:
function writeCurrentTime() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
// 取得現在時間 (可能是美國時區)
const now = new Date();
// 強制轉換為台北時區,並格式化為我們熟悉的長相
const taipeiTime = Utilities.formatDate(now, 'Asia/Taipei', 'yyyy-MM-dd HH:mm:ss');
// 寫入 A1 儲存格
sheet.getRange('A1').setValue(taipeiTime);
Logger.log(`寫入的台灣時間為:${taipeiTime}`);
}
從此之後,你的自動化報表再也不會出現「穿越時空」的靈異現象了。
坑點二:讀不到最新資料?強制刷新快取 (Flush)
第二個常見的致命坑點是:Google Sheet 為了讓網頁跑得快,它會把資料「快取 (Cache)」起來。 如果你寫了一個腳本,邏輯是:
- 寫入一個新數值到 A1 儲存格。
- A1 儲存格有一個公式
=A1*100,結果會顯示在 B1。 - 腳本立刻去讀取 B1 的數值。
你會崩潰地發現,腳本讀到的 B1 竟然是「舊的數字」!因為腳本跑得太快了,Google Sheet 還來不及在背景把公式算完,腳本就已經讀取過去了。
Vibe Prompt 除錯法:強迫 Google 停下來算完
【GAS 強制更新 Prompt】 我的 GAS 腳本在寫入資料後,立刻去讀取另一個包含公式的儲存格,但總是讀到舊的資料(公式還沒重新計算完)。請問該如何強制 Google Sheet 在腳本執行中立刻重新計算並更新畫面?
AI 會告訴你一個價值連城的隱藏指令:SpreadsheetApp.flush();。
function updateAndRead() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
// 1. 寫入新資料到 A1
sheet.getRange('A1').setValue(10);
// 2. 🚨 終極防禦:強迫 Google Sheet 立刻更新所有公式與畫面!
SpreadsheetApp.flush();
// 3. 現在去讀取 B1 的公式結果,保證 100% 是最新的!
const result = sheet.getRange('B1').getValue();
Logger.log(result);
}
加上這行 flush() 之後,你的自動化排程就擁有了鋼鐵般的穩定性。
坑點三:執行時間超過 6 分鐘的「死亡報錯」
Google 雖然很大方地提供免費的伺服器給我們跑 GAS,但它有一個嚴格的限制:「任何一個腳本,執行時間不能超過 6 分鐘」。 如果你寫了一個超級爬蟲,要去爬 1000 個網頁,跑到第 6 分鐘的時候,Google 會毫不留情地直接把你的腳本強制「砍斷 (Exceeded maximum execution time)」。
進階解決方案:切塊執行與紀錄進度
遇到這種狀況,你的 Vibe Prompt 就要升級了。你要教 AI 怎麼寫「接力賽腳本」。
【超時防護 Prompt】 我的 GAS 腳本需要處理 1000 筆資料,每次都會遇到 6 分鐘超時的問題。 請幫我修改程式碼的架構。 在處理每筆資料後,請在資料旁邊的欄位寫入
處理完成。 並且請加上時間檢查邏輯:每次迴圈開始前,檢查Date.now()是否已經執行超過 5 分鐘。 如果超過 5 分鐘,請主動return結束腳本,避免被系統強制砍斷。 這樣我只要設定一個「每 10 分鐘執行一次」的 Trigger,它就會自動接續上一筆還沒處理的資料繼續往下跑。
透過這個完美的接力賽架構,你就能夠完全突破 Google 的 6 分鐘限制,讓你的腳本變成一個無底洞的永動機!
結語:掌控自動化的神兵利器
恭喜你!完成這 5 章的 GAS 實戰課程後,你已經超越了 95% 每天只會按 Ctrl+C 與 Ctrl+V 的上班族。 你擁有了一支隱形的機器人軍隊,可以幫你抓股價、算報表、發信件。更重要的是,你學會了遇到錯誤時如何用 Vibe Coding 精準除錯。
不要停下腳步!把這些自動化思維帶入你每天的日常工作中,你會發現,時間是你最大的資產。讓我們繼續前進,探索下一個令人興奮的科技領域!
🎁 [VIP 專屬加碼] GAS 極致擴充:串接 OpenAI 與 LINE Notify
在學會了基礎的 GAS 表單自動化後,你已經可以幫行政人員省下大量的時間了。 但如果我們把 GAS 這個免費的後端,加上「AI 的大腦 (OpenAI)」與「最強的通知渠道 (LINE)」,這套系統的商業價值將會呈現指數型爆炸。
想像一個情境:「當客人填寫 Google 表單客訴時,系統自動讓 AI 分析客訴情緒,如果情緒極度憤怒,立刻透過 LINE 傳送警報給老闆的群組。」 這個功能在市面上,至少可以向企業收取每月 3000 元的維護費。而你,只需要花 15 分鐘。
1. LINE Notify 串接實戰 (免審核、免月費)
比起正規的 LINE 官方帳號 (Messaging API),LINE Notify 是一個極度輕量、適合用來做內部警報的工具。 你只需要去 LINE Notify 官網申請一組權杖 (Token)。
✅ Vibe Prompt 示範:
「我目前在 Google Apps Script (GAS) 環境中。
- 請幫我寫一個函式
sendLineNotify(message)。- 請使用
UrlFetchApp.fetch呼叫 LINE Notify 的 API (網址:https://notify-api.line.me/api/notify)。- Headers 請帶上
Authorization: Bearer [你的Token]。- Payload 為
{ "message": message }。- 請加上 try-catch 錯誤處理。」
這段不到 10 行的程式碼,就是你建立所有「自動化報警系統」的核心基石。
2. OpenAI API 串接:讓試算表擁有智商
GAS 最強大的地方在於它的 UrlFetchApp 可以呼叫全世界任何 API。
你可以寫一個自訂函數,讓 Google Sheet 的儲存格直接變成 ChatGPT!
✅ Vibe Prompt 示範:
「請在 GAS 中寫一個自訂函式
ASK_AI(prompt, text)。
- 呼叫 OpenAI 的
https://api.openai.com/v1/chat/completionsAPI。- 使用
gpt-4o-mini模型。- 將使用者的 prompt 與 text 組合送出,並解析回傳的 JSON 結果。
- 把這個函式設計成可以讓我在 Google 試算表的儲存格中直接使用 (例如輸入
=ASK_AI("請幫我把這句話翻譯成日文", A1))。」
當你把這個腳本貼進去後,你的客戶在 Google 試算表裡面,只要拉一下十字游標,整排的商品文案就會被 AI 自動翻譯好、或是自動寫好社群貼文!
3. 銷售自動化專案的終極話術
當你把這些技術組合在一起時,你賣的已經不是「幫你寫個腳本」,而是「幫你省下一個助理的薪水」。
「老闆,你們現在請工讀生每天看報表、回訊息,一個月至少要花兩萬。我幫你導入這套 AI 表單自動化系統,建置費收你三萬就好。以後系統 24 小時幫你監控客訴、自動發信、自動推播 LINE 群組,不會生病也不會遲到。」
這種「以投資回報率 (ROI)」為導向的談判話術,就是你透過這門課學到最珍貴的財富。去向市場證明你的價值吧!