从一个片到另一个复制一个行(copy one row from one sheet to anoth

2019-07-03 18:35发布

我知道,因为我已经花了近5小时内从这里甚至关闭谷歌产品论坛尝试他们这一切已经被问过。 我不能让任何一个循环的停止。 条件越来越满足,但环路保持运转和运行。 我已经从其他在线的例子复制和插入我自己的变量,但最终,我将有5行到新的工作表数次直到板累了或什么的。

我试过getDataRange ......我已经试过getRange ......我试过在环路和其他循环变种,我已经试过所有,所以请大家看看,让我知道这个代码是如何保持导致行获取添加到新的工作表多次了:

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

谢谢你的帮助!

Answer 1:

我真的不与user1795832的答案达成一致,因为它不使用批量写入,但只是那么为什么使用数组这样做将数据写入每次条件为真表2 ...?

尝试简单地批循环完成后写入表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);
  }
}

编辑:另一种可能性您的评论来选择你复制的列如下

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


Answer 2:

是的,问题是您的目标变量。 你是不是每次循环后重置,所以每一行只是不断在那里得到复合,每次复制(所以流过第三列循环时,行1和2仍处于DEST可变)。 放 “DEST = [];” 只是里面的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);
    }
  }
}


文章来源: copy one row from one sheet to another