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

如何最佳化 Google Apps 腳本以減少因頻繁呼叫 Range.getValue() 和 Range.setValue() 導致的過多處理時間?

Patricia Arquette
發布: 2024-11-30 14:58:11
原創
487 人瀏覽過

How Can I Optimize Google Apps Script to Reduce Excessive Processing Time Caused by Frequent Range.getValue() and Range.setValue() Calls?

可能由於Range.getValue() 和Range.setValue() 呼叫過多而導致處理時間過長

問題描述

腳本掃描列出客戶訂單資訊、識別州代碼並組合名字和姓氏。它還在必要時插入空白行。然而,由於頻繁地呼叫 Range.getValue() 和 Range.setValue(),大列的處理時間變得過長。

最佳化

為了減少處理時間,建議盡量減少呼叫Google 的服務,包含 Range.getValue() 和 Range.setValue()。可以實施以下最佳化:

  • 盡量減少服務呼叫:避免對 Google 伺服器進行冗餘呼叫。例如,不要在迴圈中使用 Range.getValue() 和 Range.setValue(),而是將所有必要的資料一次讀取到陣列中,然後將其批次寫回電子表格。
  • 看看- 提前快取: Google Apps 腳本快取值以減少重複呼叫。透過最小化交替讀寫命令來優化腳本,從而有效利用快取。
  • 使用陣列:將資料擷取到陣列(二維 JavaScript 陣列)中並執行操作數組內的資料。這減少了對電子表格進行讀取和寫入呼叫的次數。
  • 避免交替讀取/寫入:避免交替讀取和寫入指令,因為這可以繞過前瞻性快取機制。將類似的操作(例如讀取或寫入)一起批次處理。

程式碼改進

以下是解決處理時間過長問題的最佳化腳本:

function format() {
  const SS = SpreadsheetApp.getActiveSpreadsheet();
  const SHEET = SS.getActiveSheet();
  const LAST_ROW = SHEET.getRange('A:A').getLastRow();
  let row, range1, cellValue, offset1, offset2, offset3;

  // Loop through all cells in column A
  for (row = 0; row < LAST_ROW; row++) {
    range1 = SHEET.getRange(row + 1, 1);

    // If cell substring is a number, skip it as substring cannot process numbers
    cellValue = range1.getValue();
    if (typeof cellValue === 'number') continue;

    // Check for the state code prefix "-"
    const DASH = cellValue.substring(0, 1);

    // Get neighboring cells
    offset1 = range1.offset(1, 0).getValue();
    offset2 = range1.offset(2, 0).getValue();
    offset3 = range1.offset(3, 0).getValue();

    // Handle state code "-"
    if (DASH === '-') {
      // Merge cells 1 and 2 and write "Order complete" in cell 2
      range1.offset(1, 0).setValue(offset1 + ' ' + offset2);
      range1.offset(2, 0).setValue('Order complete');
    }

    // Insert cell if offset 3 is not blank
    if (DASH === '-' && offset3 !== '') {
      // Select cells from 3 rows down
      SHEET.getRange(row + 1, 1, LAST_ROW)
        .offset(3, 0)
        .moveTo(range1.offset(4, 0));
    }
  }
}
登入後複製

透過遵循這些最佳化,腳本將透過最大限度地減少對Range.getValue() 和Range.setValue().

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板