Google Spreadsheets脚本,copyTo vs copyValuesToRanges& copyFormatsToRanges

时间:2014-08-12 13:05:42

标签: google-apps-script google-sheets

我需要将模板行复制到新范围。

模板单元格中包含格式,值和函数可能存在的内容。

当我将一行复制到多行的范围时,函数copyValuesToRange()和copyFormatsToRange()看起来很好。

基本上我的代码有点像这样;

Template.copyFormatToRange(sheet, 1, lastColumn, lastRow + 1, lastRow + N);
Template.copyValuesToRange(sheet, 1, lastColumn, lastRow + 1, lastRow + N);

这将我的模板行复制到从lastRow + 1开始的N个新行。

然后我注意到它没有复制模板行中的函数,例如= SUM(B2:C2)

我可以使用getFunctions()来获取包含模板行和setFunctions()中的函数的数组,以将它们复制到目标ROW中。 不便之处在于我必须切换到A1表示法,这会增加脚本的执行时间。重要的是,setFunctions()写入的目标范围必须与数组的大小相同。这意味着我必须运行for循环才能将函数复制到N行。

如果我正在运行for循环,我可以使用

  • for循环copyTo()

    而不是

  • copyFormatToRange
  • copyValuesToRange
  • for loop to setFunctions

我试图避免使用copyTo(),因为我想出了一定大小的N,单个命令复制***** ToRange会比for循环更有效。我是否坚持使用for循环或者是否有任何聪明的方法可以将函数从单行复制到一系列行中?

1 个答案:

答案 0 :(得分:1)

但您可以使用copyTo复制到"广泛的"目的地,你不必循环。 e.g。

function copyTo() {
  var s = SpreadsheetApp.getActiveSheet();
  s.getRange('A2:D2').copyTo(s.getRange('A3:D10'));
}

刚刚测试过,它正常工作。

但是如果你想让这些功能发挥作用,你应该使用getFormulasR1C1setFormulasR1C1对。设置值后设置公式可能产生的另一个问题是,您必须跳过"纯值"单元格,或者您将使用空白公式覆盖它们。使用copyTo似乎确实是最好的方法。