處理時間長:解決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中文網其他相關文章!