简体   繁体   English

将一行从一张复制到另一张

[英]copy one row from one sheet to another

I know this has been asked before because I have spent the last 5 hours trying them all from here and even the closed google product forum. 我知道有人问过这个问题,因为我花了最后5个小时从这里甚至关闭的Google产品论坛上尝试所有这些。 I can't get any of the loops to stop. 我无法停止任何循环。 The conditions are getting met, but the loop keep running and running. 满足条件,但循环不断运行。 I have been copying from other examples online and inserting my own variables, but in the end, I'll have 5 rows go to the new sheet several times until the sheet gets tired or something. 我一直在网上从其他示例中复制并插入自己的变量,但是最后,我将有5行多次进入新工作表,直到工作表累了之类。

I've tried getDataRange...I've tried getRange...I've tried var in loops and other loops, I've tried them all, so please take a look and let me know how this code keeps resulting in rows getting added to the new sheet multiple times over: 我已经尝试过getDataRange ...我已经尝试过getRange ...我已经尝试过var在循环和其他循环中,我已经尝试了所有这些,所以请看一看,让我知道这段代码如何保持行数多次添加到新工作表中:

function runReportAllMemCos1() {
  var sheet1 = sskey.getSheetByName('Businesses');
  var sheet2 = sskey.getSheetByName('tempsheet');

  var data = sheet1.getRange(1,1, sheet1.getLastRow(), sheet1.getLastColumn()).getValues();

  var dest = [];
  for (var i = 0; i < data.length; i++ ) {
    if (data[i][12] == "Associate") { 
      dest.push(data[i]); 
    } Logger.log(data)
    if (dest.length > 0 ) {
    sheet2.getRange(sheet2.getLastRow()+1,1,dest.length,dest[0].length).setValues(dest);
    }
  }
}

Thanks for any help! 谢谢你的帮助!

I don't really agree with user1795832's answer as it doesn't make use of batch writing but simply writes data to sheet 2 each time the condition is true... so why using an array to do that ? 我真的不同意user1795832的答案,因为它不使用批处理写入,而每次条件成立时仅将数据写入工作表2 ...为什么要使用数组来做到这一点?

Try simply to batch write to sheet 2 after the loop is completed and it should work as expected. 循环完成后,尝试简单地批量写入工作表2,它应能按预期工作。

function runReportAllMemCos1() {
  var sheet1 = sskey.getSheetByName('Businesses');
  var sheet2 = sskey.getSheetByName('tempsheet');

  var data = sheet1.getRange(1,1, sheet1.getLastRow(), sheet1.getLastColumn()).getValues();

  var dest = [];
  for (var i = 0; i < data.length; i++ ) {
    Logger.log(data[i][12]);// just to check if the condition is true sometimes ;-)
    if (data[i][12] == "Associate") { 
      dest.push(data[i]); 
    }
  } // here is the end of the for loop

  Logger.log(dest) ; // log the dest array instead

  if (dest.length > 0 ) { // if something has been written in your array then batch write it to the dest. sheet
    sheet2.getRange(sheet2.getLastRow()+1,1,dest.length,dest[0].length).setValues(dest);
  }
}

EDIT : other possibility following your comment to choose the columns you copy 编辑:评论后的其他可能性以选择要复制的列

function runReportAllMemCos1() {
  var sheet1 = sskey.getSheetByName('Businesses');
  var sheet2 = sskey.getSheetByName('tempsheet');

  var data = sheet1.getRange(1,1, sheet1.getLastRow(), sheet1.getLastColumn()).getValues();

  var dest = [];
  for (var i = 0; i < data.length; i++ ) {
    Logger.log(data[i][12]);// just to check if the condition is true sometimes ;-)
    if (data[i][12] == "Associate") { 
      var destRow = []; // initialise intermediate array
      destRow.push(data[i][1],data[i][2],data[i][12]);// choose here the columns you want to add (here col2, 3 & 13)
      dest.push(destRow); 
    }
  } // here is the end of the for loop
  Logger.log(dest) ; // log the dest array instead
  if (dest.length > 0 ) { // if something has been written in your array then batch write it to the dest. sheet
    sheet2.getRange(sheet2.getLastRow()+1,1,dest.length,dest[0].length).setValues(dest);
  }
}

Yep, the problem is your dest variable. 是的,问题出在你的目标变量上。 You aren't resetting it after each loop, so each row just keeps getting compounded in there and duplicates each time (so when looping through the third row, rows 1 and 2 are still in the dest variable). 您无需在每次循环后对其进行重置,因此每一行只会不断在其中进行混合并每次都重复(因此,在循环第三行时,行1和2仍在dest变量中)。 Put "dest = [];" 输入“ dest = [];” just inside your for loop and it'll work. 就在您的for循环中,它将起作用。

function runReportAllMemCos1() {
  var sheet1 = sskey.getSheetByName('Businesses');
  var sheet2 = sskey.getSheetByName('tempsheet');

  var data = sheet1.getRange(1,1, sheet1.getLastRow(), sheet1.getLastColumn()).getValues();

  var dest = [];
  for (var i = 0; i < data.length; i++ ) {
    dest = [];
    if (data[i][12] == "Associate") { 
      dest.push(data[i]); 
    } Logger.log(data)
    if (dest.length > 0 ) {
      sheet2.getRange(sheet2.getLastRow()+1,1,dest.length,dest[0].length).setValues(dest);
    }
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 将行从一张工作表复制到另一张在该行中链接的工作表 - Copy Row from one Sheet to another sheet which is linked in the row 将活动行从一个工作表复制到另一个Google工作表 - copy active row From one sheet to another google sheets 将一行从一个Google表格电子表格复制到表单提交中的另一表格 - Copy a row from one Google Sheet Spreadsheet to Another on Form Submit 将一行从一张纸移动到另一张纸? - Moving a row from one sheet to another sheet? 将每一行数据从K列中具有给定值的一张工作表复制到另一张工作表 - Copy every row of Data from one sheet that has a given value in column K to another sheet 根据单元格值将最后一行从一个工作表复制到另一个工作表,并在主工作表中不断更新 - Copy last row from one sheet to another depending on cell value with constant updates in master sheet 如何将范围从一个工作表复制到另一工作表的范围,然后重复复制到下一行 - How to copy a range from one sheet to a range in another sheet, then repeat copying to the next row down 回复:将数据的每一行从具有给定值的一个工作表复制到另一工作表 - Re: Copy every row of Data from one sheet that has a given value to another sheet 将特定范围复制到从一个工作表到另一个工作表中的第一个空行和特定列 - Copy a specific range to from one sheet to the first empty row and specific column in another sheet Google Sheet 将数据从一张表复制到另一张表并返回最后一行 - Google Sheet copy data from one sheet to another and return last row
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM