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

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



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);
    }
  }


}




我更新了代码,使for循环中的lastrow和target变量仍具有不希望的结果。


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


  var data = sheet1.getRange('E1:E500').getValues();

  for(var i=1; i< data.length; i++) {
    var lastrow = sheet2.getLastRow()+1;
    var target = sheet2.getRange(lastrow,1,1,5);
    //Logger.log(i)
    if (data[i] !== "") {
      Logger.log(data[i])

      sheet1.getRange(i, 1, 1, 5).copyTo(target);
    }
  }


}

最佳答案

需求:

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



解:

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,这是工作表“ Final”的下一个可用行,每次循环完成时加1。

关于javascript - 如果第5列不是空白,则将行复制到目标表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56583426/

10-11 06:10