如何有效利用 onEdit 函數?Google Apps Script 新手完全指南

更新日期: 2023 年 7 月 31 日

Google Apps Script 的 onEdit 函數,是一種特殊的「觸發器」函數。

當試算表(Google Sheets) 中的儲存格被編輯時,會自動啟動該函數。

本文將介紹 onEdit 函數的基礎知識,包括它是什麼、如何使用,以及一些實際的例子。

此外,我們也會討論一些使用 onEdit 函數時,可能會遇到的常見問題。

現在,讓我們開始深入了解 onEdit 函數吧!

什麼是 onEdit 函數?

在 Google Apps Script 中,onEdit 是一種特殊的觸發器函數。

當使用者更改任何試算表中儲存格的值時,試算表會自動觸發 onEdit 函數,並執行包含在該函數內程式碼。

以下是一個簡單的 onEdit 函數範例:

function onEdit(e) {
  let range = e.range;
  range.setNote('最後修改時間: ' + new Date());
}

在此範例中,每當儲存格被編輯,都會在該單元格添加一個註釋,註釋內容是該單元格最後被修改的日期和時間。

請注意,onEdit 函數接受一個參數「 e 」。這個參數是一個物件,它包含關於編輯事件的相關訊息。

在這個範例中,我們使用了 e.range 來獲取被編輯的儲存格位置。

使用 onEdit 函數,我們可以根據單元格內容的變化來自動執行許多操作,這提供了大量的彈性和可能性。

onEdit 函數的實例解析

在這部分,我們會透過兩個實例來更深入地理解 onEdit 函數的用法。

自動追蹤更改日期和時間

以下代碼,用來表示每當任何儲存格的內容被編輯,我們會在同一行的最後一個單元格中,記錄當前的日期和時間。

此功能對於追蹤數據的時間變化非常有用。

// 定義 onEdit 的函數,該函數會在 Google Sheets 中的任何單元格被編輯時自動執行。
// 這裡的 e 是一個事件物件,包含了關於這次編輯事件的資訊。
function onEdit(e) { 

    // 從事件物件 e 中取出了被編輯的單元格範圍(Range),並將它存放在變數 range 中
    let range = e.range; 

    // 使用 getSheet 方法,取得了被編輯的單元格所在的工作表(Sheet),並將它存放在變數 sheet 中。
    let sheet = range.getSheet(); 

    // 使用 getLastColumn 方法,找出了該工作表中,最後一列有內容的「列數」(垂直),並將它存放在變數 lastColumn 中。
    let lastColumn = sheet.getLastColumn(); 

    // 使用 getRow 方法,取得了被編輯的單元格的「行數」(水平),並將它存放在變數 row 中。
    let row = range.getRow(); 

    // 創建了一個新的 Date 物件,表示現在的日期和時間,並將它存放在變數 currentDate 中。
    let currentDate = new Date(); 

    // 將當前的日期和時間,設置為被編輯的「單元格所在行」的「最後一列」的值。
    sheet.getRange(row, lastColumn).setValue(currentDate); 
} 

基於單元格更改的條件格式

以下代碼,用來表示當單元格的值變成「完成」時,該單元格的背景色變為綠色。

// 同樣定義了一個名為 onEdit 的函數,該函數會在 Google Sheets 中的任何單元格被編輯時自動執行。
// e 依然是一個事件物件。
function onEdit(e) { 

    // 取出了被編輯的單元格範圍。
    let range = e.range; 

    // 使用 getValue 方法,取得了被編輯的單元格的內容,並將它存放在變數 value 中。
    let value = range.getValue(); 

    // 檢查是否等於 '完成'。
    if (value == '完成') { 

        // 如果條件成立(也就是單元格的內容等於 '完成'),那麼就將該單元格的背景顏色設置為綠色。
        range.setBackground('green'); 

    } 
    
    // 如果條件不成立(也就是單元格的內容不等於 '完成')
    else { 
        // 那麼就將該單元格的背景顏色設置為白色。
        range.setBackground('white'); 
    } 
}

當單元格的值變為「完成」時,這個程式碼會將該單元格的背景色變為綠色。否則,背景色會被設定為白色。

以上僅簡單示範基本的功能,你可以根據自己的需求,進行自動化的功能增添。

onEdit 函數的常見問題

onEdit 函數的執行限制

在 Google Apps Script 中,onEdit 函數和其他觸發器函數都有執行時間的限制。

在大部分情況下,每個觸發器函數的執行時間不能超過 30 秒。

如果你的 onEdit 函數,需要執行大量的操作或進行網路請求,就可能會超過時間限制。

編輯操作的範圍

onEdit 函數的參數 e 包含了一個 range 屬性,表示被編輯的儲存格範圍。

然而,請注意這個範圍可能不止包含一個單元格

例如,如果用戶選擇了多個儲存格並一次性修改了它們的內容,那麼這個 range 就會包含所有被編輯的單元格。

onEdit 函數不會對非手動編輯操作觸發

onEdit 函數只會在儲存格的內容,被「手動編輯」時被觸發。

如果一個單元格的內容變化,是由於其他單元格的公式計算結果改變,或是由 Apps Script 程式碼的執行,那麼 onEdit 函數並不會被觸發。

結語


藉由本文,我們了解了 Google Apps Script 中 onEdit 函數的基礎知識、實際應用。

同時釐清了一些常見的問題與疑惑。

希望這些內容,能對你在實際操作中提供有力的參考和幫助。

參考資源

以下是一些有關 Google Apps Script 和 onEdit 函數的參考資源:

官方文檔

Google Apps Script 官方文檔,包含了所有的API和功能。你可以在這裡找到所有的函數和方法的詳細說明。

其他觸發器

這部分的文檔專門介紹了 Google Apps Script 中的觸發器(Triggers)

Stack Overflow

Stack Overflow 是一個程式開發者論壇,有很多關於 Apps Script 的問題和答案,是一個很好的參考資源。

文字教學

這個部落格提供了一系列的 Apps Script 基礎教程,適合希望深入學習的讀者。

以上就是一些學習 Google Apps Script 和 onEdit 函數的參考資源。

希望這些資源可以幫助你在學習的道路上一路前行。

Similar Posts