如果x推送到另一个电子表格,则遍历行

时间:2019-06-14 13:40:18

标签: javascript google-apps-script

我的脚本大部分都能正常工作-除了要推送的数据实际上说“ 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))
    }
  }
}

1 个答案:

答案 0 :(得分:2)

问题:

setValue()设置“范围”,而不是实际值。


原因:

首先,您要向setValue()传递范围而不是值。


解决方案:

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

由于要设置整个范围的值,因此需要使用setValues()而不是setValue()注意:复数而不是单数。getValues()添加到您已经提取的范围内,这将返回该范围内的值数组,然后可以将该值传递给setValues()