top of page

讓 Apps Script 加速的 3 個技巧

作家相片: 駒米駒米

Google Apps Script 是自動化行政流程的好幫手,但當程式跑得太慢,甚至執行逾時或超額配額卡住,再好的腳本也沒有用。


這裡有三個小技巧,幫你的程式踩了一腳油門,讓它跑得又快又穩!


 

拒用 appendRow() ,改用批量寫入

如果你常用 Google Sheet,可能會覺得 appendRow() 很好用,處理完資料直接寫進 Sheet。但你可能不知道,它每次都要呼叫 API 操作,而且每次只寫入一筆。


當有大量資料時,這種操作就像用滴管裝水,會慢得讓人崩潰。


改善方法:批量處理資料

用 記憶體暫存(Array)儲存資料,最後一次性用 setValues() 全部寫回表格,減少呼叫 API。


錯誤範例


function slowAppendRows() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();

  for (var i = 0; i < 100; i++) {
    sheet.appendRow([i, '數據' + i]);
  }
}
 

優化範例


function fastWriteRows() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();

  var data = [];


  for (var i = 0; i < 100; i++) {
    data.push([i, '數據' + i]);
  }

  sheet.getRange(sheet.getLastRow() + 1, 1, data.length, data[0].length).setValues(data);

}

同樣道理,像 insertRowAfter() deleteRow() 這些操作,還有 getValue()、setValue() 的頻繁使用,都應該能省就省。核心觀念是:減少 API 呼叫,靠記憶體多處理。


 

別亂開 Logger.log()

Logger.log() 是很實用的偵錯工具,但它也是隱形的效能殺手,因為它也是一種 API 呼叫操作。如果在大迴圈裡不加過濾,拼命寫 Log,程式執行時就會一直等待 Log 寫入與回應。


改善方法:加上日誌開關

設置全域變數作為 Debug 模式的開關,必要時才啟用記錄,避免不必要的日誌生成。


範例: Debug Mode 的參考結構


// 全域變數,控制是否啟用除錯模式

var DEBUG_MODE = true;

function logDebug(message) {
  if (DEBUG_MODE) {
    Logger.log(message);
  }
}

function exampleFunction() {

  logDebug("這是一條除錯訊息");

  // 你的其他程式碼
  for (var i = 0; i < 10; i++) {
    logDebug("目前的迴圈次數: " + i);
  }
}

 

觸發器記得加防呆條件

若使用「開啟文件」或「編輯時」觸發器,務必加上條件判斷,確保程式只在需要時執行,避免每次觸發都浪費資源跑整支程式。


範例:只有目標工作表或欄位才執行


function onEdit(e) {
  // 取得被編輯的工作表、儲存格位置
  var sheet = e.range.getSheet();
  var editedColumn = e.range.getColumn();

  // 檢查工作表名稱及編輯的欄位置
  if (sheet.getName() !== "Data") {
    // 如果編輯的不是 "Data" 這個工作表,直接結束,不執行後續程式
    return;
  }

  if (editedColumn !== 2) {
    // 如果編輯的不是第 2 欄,直接結束
    return;
  }

  // ... 在這裡放入你的後續處理程式碼
}

 

結語

有些人覺得:「反正程式在背景跑,慢就慢嘛,我又沒差。」我完全同意這種看法!就像洗碗機明顯洗得很慢,可是我不用動手啊!慢就慢吧!


但問題是,Google 免費版 Apps Script 的配額有限:每天運算時間 90 分鐘,每次最長 6 分鐘。這些配額對大多數人夠用,但如果你寫的腳本特別吃資源,就可能會把額度耗光。


透過這些小技巧,讓你的 Apps Script 更高效,節省配額又能穩定運行,輕鬆當個效率大師!


Comments


駒米 JUMI

部落格《JUMI》創辦人 / 系統開發顧問 / 獨立開發者 

時常分享數位工具、系統實務、及讀書心得。10 多年開發與管理經驗,最愛用 Google Workspace 進行團隊的流程優化。曾主持 Kensington、Johnson 等公司的產品開發,建置超過 50 個系統。

Mail-amico
​訂閱電子報 

取得最新的生產力文章及工具包

​感謝你的訂閱!

​追蹤駒米 JUMI
  • Portaly
  • Line
  • 線程

2025 駒米 JUMI | 圖片來源 Freepik, Storyset, Flaticon

bottom of page