最初,我没有找到range.copyValuesToRange()
,所以我写了这个:
var rr = src.getRange(start_row, start_col, nrows, 1).getValues();
dst.getRange(start_row, start_col+1, nrows, 1).setValues(rr);
我为更大的范围做了类似的事情,所以我重复了上面的内容:
var rr = src.getRange(start_row, start_col, nrows, 1);
rr.copyValuesToRange(dst, start_col+1, start_col+1, start_row, start_row+nrows);
我正在做一些基本的日志记录到另一张表,但我没有看到它们中的很多执行速度差异。文档说要分批做一些我正在做的事情,但是在两个方向上转换到数组会有额外的开销吗?
如果src
范围内有大量空白单元格,这些方法将如何影响dst
单元格数?
答案 0 :(得分:2)
我建议使用copyTo
(使用选项contentsOnly:true来匹配您当前正在执行的操作),因为此方法的参数与Apps脚本的其余部分更加一致。但这仅仅是因为美学,而不是出于性能原因。访问电子表格数据的脚本过程非常缓慢,以至于需要完成的任何其他转换都应该可以忽略不计。
空白单元格像其他任何单元格一样被复制,空白状态对您使用方法的方式没有影响。我喜欢copyTo
的一个原因是不必拼出目的地的坐标:正如文档所述,只有目的地范围的左上角单元格是相关的。所以,我会写一个单行
src.getRange(start_row, start_col, nrows, 1).copyTo(dst.getRange(start_row, start_col), {contentsOnly: true})
如果没有{contentsOnly: true}
,效果相当于普通的复制粘贴,也会带有公式和格式。使用{contentsOnly: true}
,它仅相当于复制和粘贴值。如果目标中需要其他行或列,则会自动插入它们。