首頁 >web前端 >js教程 >如何最佳化 Google Apps 腳本以減少因頻繁呼叫「getValue()」和「setValue()」而導致的較長處理時間?

如何最佳化 Google Apps 腳本以減少因頻繁呼叫「getValue()」和「setValue()」而導致的較長處理時間?

Susan Sarandon
Susan Sarandon原創
2024-12-08 09:00:23680瀏覽

How Can I Optimize Google Apps Script to Reduce Long Processing Times Caused by Frequent `getValue()` and `setValue()` Calls?

處理時間長:解決getValue() 和單元格插入

在您提供的程式碼中,處理時間過長的問題來源於頻繁的在迴圈中使用Range.getValue() 和Range.setValue() 方法。當腳本循環遍歷 A 列中的每個單元格時,它會多次讀取和寫入值,從而顯著減慢執行速度。

最佳化程式碼

為了解決此效能問題對於這個問題,有必要盡量減少對服務的調用,主要集中在減少Range.getValue() 和Range. setValue() 操作的數量。以下是最佳化程式碼的方法:

批次讀取

不要使用range1.getValue() 單獨檢索每個單元格的值,而是讀取所有單元格的值一批操作中所需的細胞。例如,如果您需要當前行和接下來三行的值,您可以使用 s.getRange(row 1, 1, 4, 1).getValues() 一次檢索它們。

批次寫入

同樣,不是設定單一儲存格的值,而是收集所有需要的值寫入,然後在一批操作中分配它們。例如,如果要將值寫入目前行和接下來的三行,可以使用range1.offset(0, 0, 4).setValues([["data 1"], ["data 2"], ["數據3”],[“數據4”]]);

最佳化範例

這是包含這些最佳化的程式碼的最佳化版本:

function format() {

    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var s = ss.getActiveSheet();
    var lastRow = s.getRange("A:A").getLastRow();

    var allValues = s.getRange(1, 1, lastRow, 1).getValues();

    // Loop through all rows in the spreadsheet
    for (var row = 0; row < lastRow; row++) {
        var cellValue = allValues[row][0];
        if (typeof cellValue === 'number') {
            continue;
        }
    }
}

透過使用這些最佳化,您可以顯著減少對服務的呼叫次數並提高腳本的效能。這種方法將對服務的呼叫次數從每個循環 8 次減少到僅 2 次,從而顯著減少處理時間。

以上是如何最佳化 Google Apps 腳本以減少因頻繁呼叫「getValue()」和「setValue()」而導致的較長處理時間?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn