get/setValues() 和 range.copyTo(destRange) 之间的性能差异是什么?

1 google-sheets google-apps-script

所以我将应用程序脚本与具有 100k+ 行的工作表一起使用,所以我想知道哪些方法具有更好的性能,通常,我使用srcRange.getValues()dstRange.setValues(dstData)使用应用程序脚本在工作表中移动数据,但是,我最近发现在尝试应用时它们的性能显着下降它们在大约 20K 单元的范围内,现在我只想知道我应该继续使用它们还是考虑使用类似的东西srcRange.copyTo(dstRange)来代替,如果它的性能更好。

Nik*_* J. 5

getValues()最好setValues()在将数据写入工作表之前修改或验证数据内容时使用。如果您的目标只是将数据从一张纸复制到另一张纸,那么最好使用的方法是Range.copyTo(dstRange)因为它不需要脚本读取、处理和写入大尺寸数组。

getValues/setValues这是我为vs所做的示例测试copyTo

function myFunction() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sh1 = ss.getSheetByName('Sheet1');
  var sh2 = ss.getSheetByName('Sheet2');
  sh1.getRange("A1:AL2967").copyTo(sh2.getRange("A1"));
}

function myFunction2() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sh1 = ss.getSheetByName('Sheet1');
  var sh2 = ss.getSheetByName('Sheet3');
  var data = sh1.getRange("A1:AL2967").getValues();
  sh2.getRange(1,1,data.length, data[0].length).setValues(data);
}
Run Code Online (Sandbox Code Playgroud)

myFunction 运行时间:

在此输入图像描述

myFunction2 运行时间:

在此输入图像描述