2017-09-15 67 views
0

我试图通过检查一个键列'O'将行从一个表复制到另一个表。通过检查GAS中的键阵列将行复制到新工作表中

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的同一行,这就是为什么我可以看到它发生的原因。

回答

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这是atomical和避免这样的问题每次写一些数据时间得到最后一排的新价值。

+0

我有'tkhLastRow = newSheet.getLastRow();'声明更高。在IF声明中重新声明它还做了其他事情吗? – testing123

+0

这不是关于声明。如果您刚开始使用程序,tkhLastRow值不会改变。例如,最后一行是第3行:您将拥有'tkhLastRow = 3'。你将复制的第一行将在第3行。但在此之后,如果您不更新您的tkhLastRow值,它将保持在3而不是4。因此它总是在同一行上,这似乎是您的问题。 –

+0

它仍然遍历所有行,所以它是循环的问题... – testing123

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'); 
     } 
    } 
} 
相关问题