繁体   English   中英

Apps 脚本:将 SELECTED 行从一个工作表移动到另一个工作表的最后可用行

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM