简体   繁体   中英

iterate through rows if x push to another spreadsheet

I have the script mostly working- except the data being pushed actually says "Range" I must be missing something- can you not set values across a range?

 function up4Grabs() { var sheet1 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1'); var sheet2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Final'); var destsheet = SpreadsheetApp.openById("MYID GOES HERE").getSheetByName('Items'); var destLastRow = destsheet.getLastRow(); var destRange = destsheet.getRange(1,9,destLastRow); var dataLastRow = sheet1.getLastRow(); var dataRange = sheet1.getRange(1,9,dataLastRow); var data = dataRange.getValues(); for(var i = 0; i < data.length; i++) { if (data[i] > 0) { var targetLastRow = destsheet.getLastRow() + 1; var test = destsheet.getRange(1,9,targetLastRow); sheet1.getvalues(test).setValues(sheet1.getRange(i+1,1,1,9)) } } } 

Problem:

setValue() setting "Range" rather than actual values.


Cause:

You're passing a range rather than a value to the setValue() in the first place.


Solution:

function up4Grabs() {
  var sheet1 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1');
  var sheet2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Final');
  var destsheet = SpreadsheetApp.openById("MY ID GOES HERE").getSheetByName('Items');
  var destLastRow = destsheet.getLastRow();
  var destRange = destsheet.getRange(1,9,destLastRow);

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

  for(var i = 0; i < data.length; i++) {
    if (data[i] > 0) { 
      var targetLastRow = destsheet.getLastRow() + 1;
      var values = sheet1.getRange(i+1,1,1,9).getValues();
      destsheet.getRange(1,9,values.length,9).setValues(values);
    }
  }
}

Since you're setting the values of a whole range, you need to use setValues() rather than setValue() , note: plural rather than singular. I've also added getValues() to the range you were already pulling, this returns the array of values within the range that can then be passed to setValues() .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM