首页 >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