![](/img/trans.png)
[英]Copy a very large number of rows from one sheet to another, excluding blank rows in Excel 2010
[英]Apps Script: Move SELECTED rows from one sheet to the last available rows of another sheet
下面的代码来自这里,最初由用户 @Cooper 编写。 它所做的只是从 SHEET 1 复制数组colA = [1,3,2,4]
中指定的列的值并将它们添加到 SHEET 2。我想重写代码的最后两行,以便将来自 SHEET 1 的值添加到 SHEET 2 中最后可用的行中。“最后 2 行”是指代码的最后几行:
drng = des.getRange(1,1,drngA.length,drngA[0].length);//destination array controls size of destination range.drng.setValues(drngA);
知道如何完成这项工作吗?
非常感谢您的帮助!
function Copy_data()
{
var src = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("SHEET 1");
var des = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("SHEET 2");
var srng = src.getDataRange();
var srngA = srng.getValues();
var drngA = [];
var colA = [1,3,2,4];//indirect data column selection
for (var i = 0; i < srngA.length;i++ )
{
var k = 0;
drngA[i]=[];
for(var j=0;j<srngA[i].length;j++)
{
drngA[i][k++] = srngA[i][colA[j]-1];
}
drng = des.getRange(1,1,drngA.length,drngA[0].length);//destination array controls size of destination range.
drng.setValues(drngA);
}
}
您可以获得目标工作表的最后一行,然后将其添加到您的getRange()
function。 @soMario提出的方法将不起作用,因为它会在您更新工作表时在循环内发出请求,这会导致每次调用des.getLastRow()
时它都会获得不同的值。
最简单的解决方案是将getLastRow()
请求置于循环之外,然后将其包含在getRange
中。 请注意,添加了一个,以便它不会用setValue()
请求覆盖最后一行。
Code.gs
function Copy_data() {
...
var lastRow = des.getLastRow() + 1
for (var i = 0; i < srngA.length;i++ ){
...
drng = des.getRange(lastRow,1,drngA.length,drngA[0].length)
...
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.