Google apps script range.copyTo不作为例外应用程序脚本工作
当我使用Google apps script range.copyTo不作为例外应用程序脚本工作,google-apps-script,Google Apps Script,当我使用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(
)方法将范围从一个电子表格复制到另一个电子表格时,我通常会在指定目标范围时使用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()
方法不会复制数据,也不会抛出错误消息。如果使用相同的逻辑并使用.getValues()
和.setValues()
,则新行将自动添加到destSheet
我希望range.copyTo()
在需要时也能创建额外的行。这是一个例外还是一个错误?如果在newRange语句中添加.setValue(“”),您将看到一条错误消息,并且更多的行将自动添加到目标工作表,数据将被复制。
请注意,您不应该定义整个dest.range,只有左上角的单元格相关,如中所述
像这样:
var newRange = sh.getRange(ss.getLastRow()+1, 1).setValue('');
oldRange.copyTo(newRange)
无论如何,由于出现错误消息,这并不是最好的解决方法(很抱歉,服务器遇到错误。请按“确定”刷新工作表)。我想你可以合理地认为这是一个bug,你可以在这个上提出一个问题。
编辑:实际上有一个很好的解决方法,我没有立即想到:你可以在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)
}
当然,如果需要超过1行,请根据需要重复,如本例所示:
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)
}
函数copytost(){
var oldRange=sh.getRange(1,1,5,ss.getLastColumn());//本例中为5行
var newRange=sh.getRange(ss.getLastRow()+1,1);
对于(n=0;n如果在newRange语句中添加.setValue(“”),您将看到一条错误消息,更多行将自动添加到目标工作表,并且将复制数据。
请注意,您不应该定义整个dest.range,只有左上角的单元格相关,如中所述
像这样:
var newRange = sh.getRange(ss.getLastRow()+1, 1).setValue('');
oldRange.copyTo(newRange)
无论如何,这不是最好的解决办法,因为出错信息(抱歉)。服务器遇到了错误。请按“OK”刷新该页。我想可以合理地认为这是一个bug,您可以在这个
上提出一个问题。
编辑:实际上有一个很好的解决方法,我没有立即想到:你可以在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)
}
当然,如果需要超过1行,请根据需要重复,如本例所示:
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)
}
函数copytost(){
var oldRange=sh.getRange(1,1,5,ss.getLastColumn());//本例中为5行
var newRange=sh.getRange(ss.getLastRow()+1,1);
对于(n=0;我确实使用您建议的链接将其作为bug进行了归档。在他们回复之前,我将使用insertRowAfter对其进行编码。感谢您的帮助。我使用您建议的链接将其作为bug进行了归档。在他们回复之前,我将使用insertRowAfter对其进行编码。感谢您的帮助。