处理时间长:解决 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中文网其他相关文章!