2017-09-15 4 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 마지막 줄에서 새 값을 가져 오는 것을 잊었으므로 매번 같은 행에 놓습니다. 다음은 몇 가지 데이터를 기록 할 때마다 마지막 행의 새로운 가치를 얻을 당신이 atomical입니다 apprendRow(content) method 사용을 고려하고 이러한 문제를 방지해야한다, 정정을 또한

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

입니다.

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