当我使用range.copyTo(
)方法将范围从一个电子表格复制到另一个电子表格时,我通常会在指定目标范围时使用sheet.getLastRow()+1
。例如:
var oldRange = sheet.getRange(1, 1, 1, sheet.getLastColumn());
var newRange = destSheet.getRange(destSheet.getLastRow()+1, 1, 1, sheet.getLastColumn());
如果destSheet没有任何附加或"空白"在底部的行,range.copyTo()
方法不会复制数据,也不会抛出错误消息。如果我使用相同的逻辑并使用{{1}}和.getValues()
,则新行将自动添加到我的destSheet中。
如果需要,我希望.setValues()
能够创建其他行。这是不正常的还是这个错误?
答案 0 :(得分:3)
如果您在newRange语句中添加.setValue(''),您会看到错误消息 AND ,更多行会自动添加到目标表 AND 数据将被复制。 请注意,您不应该定义整个dest.range,只有左上角的单元格与the docs
中所述相关 像这样: var newRange = sh.getRange(ss.getLastRow()+1, 1).setValue('');
oldRange.copyTo(newRange)
无论如何,由于错误消息,这不是最好的解决方法(我们很抱歉。服务器遇到错误。请按“确定”刷新工作表。)。我想可以合理地认为这是一个错误,你可以在这个here
上提出一个问题编辑:实际上有一个很好的解决方法,我没有立即想到:你可以在copyTo()之前使用insertRowAfter(ss.getLastRow())
,一切正常。
例如:
var oldRange = sh.getRange(1, 1, 1, ss.getLastColumn());
var newRange = sh.getRange(ss.getLastRow()+1, 1);
ss.insertRowAfter(ss.getLastRow())
oldRange.copyTo(newRange)
当然,如果需要多于一行,则需要像本例中那样重复:
function copyToTest() {
var oldRange = sh.getRange(1, 1, 5, ss.getLastColumn());// 5 rows in this example
var newRange = sh.getRange(ss.getLastRow()+1, 1);
for(n=0;n<oldRange.getLastRow();++n){ss.insertRowAfter(ss.getLastRow())}
oldRange.copyTo(newRange)
}