如果第5列不是空白,则将行复制到目标表

时间:2019-06-13 15:03:00

标签: javascript google-apps-script

这是我使用的代码-我尝试了许多不同的组合,但没有一个组合给我想要的结果-您能解释一下为什么我的代码不正确吗?

代码正在对行进行迭代以查找大于0的行-如果是,则将行复制到目标表中-但是我得到了错误的行?

var arr = [[1],[2],[3],[4],[5]];

var newArr = arr.filter(function(inner){
    return inner[0] >= 3;
});

// newArr = [[3], [4], [5]]
我更新了代码,使for循环中的lastrow和target变量仍具有不希望的结果。
function try2() {
  var sheet1 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1');
  var sheet2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Final');
  var lastrow = sheet2.getLastRow()+1;
  var target = sheet2.getRange(lastrow,1,1,5);
  
  var data = sheet1.getRange('E1:E500').getValues();
  
  for(var i=1; i< data.length; i++) {
    Logger.log(i)
    if (data[i] > 0) {
      Logger.log(data[i])
      
      sheet1.getRange(i, 1, 1, 5).copyTo(target);
    }
  }
  

}

2 个答案:

答案 0 :(得分:1)

要求:

将数据从一张纸复制到另一张纸的下一个空闲行。


解决方案:

function try2() {
  var sheet1 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1');
  var sheet2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Final');
  var targetLastRow = sheet2.getLastRow() + 1;

  var dataLastRow = sheet1.getLastRow();
  var dataRange = sheet1.getRange(1,5,dataLastRow);
  var data = dataRange.getValues();

  for(var i = 0; i < data.length; i++) {
    if (data[i]) {      
      sheet1.getRange(i+1, 1, 1, 5).copyTo(sheet2.getRange(targetLastRow+i,1));
    }
  }
}

说明:

此脚本将循环遍历第一张工作表E列中的所有行,并将所有非空白的行复制到工作表“最终”。通过使用dataLastRow获取数据。您可以节省定义集合范围E1:E500的时间,该脚本现在将仅获得运行副本所需的行数,而在运行for循环之前,无论如何,该脚本将运行500次。

将数据复制到targetLastRow+i,这是工作表“最终”的下一个可用行,每次循环完成时都加1。

答案 1 :(得分:0)

可以更改@ross代码的代码-谢谢

function try3() {
  var sheet1 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1');
  var sheet2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Final');
  var targetLastRow = sheet2.getLastRow() + 1;

  var dataLastRow = sheet1.getLastRow();
  var dataRange = sheet1.getRange(1,5,dataLastRow);
  var data = dataRange.getValues();

  for(var i = 0; i < data.length; i++) {
    Logger.log(data[i])
    if (data[i] > 0) { 
     Logger.log(data[i])
      sheet1.getRange(i+1, 1, 1, 5).copyTo(sheet2.getRange(targetLastRow+i,1));
    }
  }
}