copy one row from one sheet to another

前端 未结 2 1882
谎友^
谎友^ 2020-12-20 08:09

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. I can\'t get any of the loops to

相关标签:
2条回答
  • 2020-12-20 08:45

    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 ?

    Try simply to batch write to sheet 2 after the loop is completed and it should work as expected.

    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);
      }
    }
    
    0 讨论(0)
  • 2020-12-20 08:52

    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). Put "dest = [];" just inside your for loop and it'll work.

    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);
        }
      }
    }
    
    0 讨论(0)
提交回复
热议问题