首页 >web前端 >js教程 >如何优化 Google Apps 脚本以减少因频繁调用 Range.getValue() 和 Range.setValue() 导致的过多处理时间?

如何优化 Google Apps 脚本以减少因频繁调用 Range.getValue() 和 Range.setValue() 导致的过多处理时间?

Patricia Arquette
Patricia Arquette原创
2024-11-30 14:58:11485浏览

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn