通过检查GAS中的键数组将行复制到新工作表

时间:2017-09-15 07:17:21

标签: java google-apps-script key

我正在尝试通过检查键列“O”将行从一个工作表复制到另一个工作表。

function keyPush(){
  var thisSheet = SpreadsheetApp.openById('##');
  var origSheet = thisSheet.getSheetByName('original');
  var origLastRow = origSheet.getLastRow();
  var newSheet= thisSheet.getSheetByName('copy');
  var tkhLastRow = newSheet.getLastRow();
  var keyCol = 'O';
  var key = origSheet.getRange(keyCol+'2:'+keyCol+origLastRow).getValues();
  for(var row=key.length-1;row>1;row--){
    if( origSheet.getRange('O'+row) != 'done' )
    {
      var orig = origSheet.getRange('A'+row+':N'+row);
      var dest = newSheet.getRange('C'+tkhLastRow+':P'+tkhLastRow);
      orig.copyTo(dest,{contentOnly:true});
      origSheet.getRange('O'+row).setValue('done');
    }
  }
}

我错过了一个循环或其他东西,因为我可以看到在新工作表上迭代的行。我需要它只将未标记为已完成的行复制到新工作表中。现在它将origSheet中的所有行推送到newSheet的同一行,这就是我可以看到它的原因。

2 个答案:

答案 0 :(得分:1)

如果对任何人都有帮助,这是工作代码。

function pushRow(){
  var thisSheet = SpreadsheetApp.openById('##');
  var origSheet = thisSheet.getSheetByName('original');
  var origLastRow = origSheet.getLastRow();
  var tkhContacts = thisSheet.getSheetByName('contacts');
  var keyCol = 'O';
  var keys = origSheet.getRange(keyCol+'2:'+keyCol+origLastRow);
  var keyRow = keys.getRow();
    for(var row=origLastRow;row>1;row--){
      if( origSheet.getRange(keyCol+row).getValue().trim() != 'done' )
      {
        var orig = origSheet.getRange('A'+row+':N'+row).getValues();
        tkhContacts.appendRow(
          [ '','',orig[0][0],orig[0][1],orig[0][2],orig[0][3],orig[0][4],orig[0][5],orig[0][6],orig[0][7],orig[0][8],orig[0][9],orig[0][10],orig[0][11],orig[0][12],orig[0][13],'','','' ] )
        origSheet.getRange(keyCol+row).setValue('done');
      }
    }
}

答案 1 :(得分:0)

您忘记从newSheet的最后一行获取新值,因此每次都会将其放在同一行。这是一个修正

function keyPush(){
  var thisSheet = SpreadsheetApp.openById('##');
  var origSheet = thisSheet.getSheetByName('original');
  var origLastRow = origSheet.getLastRow();
  var newSheet= thisSheet.getSheetByName('copy');
  var tkhLastRow = newSheet.getLastRow();
  var keyCol = 'O';
  var key = origSheet.getRange(keyCol+'2:'+keyCol+origLastRow).getValues();
  for(var row=key.length-1;row>1;row--){
    if( origSheet.getRange('O'+row) != 'done' )
    {
      tkhLastRow = newSheet.getLastRow();
      var orig = origSheet.getRange('A'+row+':N'+row);
      var dest = newSheet.getRange('C'+tkhLastRow+':P'+tkhLastRow);
      orig.copyTo(dest,{contentOnly:true});
      origSheet.getRange('O'+row).setValue('done');
    }
  }
}

另外,你应该考虑使用原子的apprendRow(content) method并避免每次写一些数据时得到最后一行的新值这样的问题。