2012-06-15 1 views
0

range.copyTo() 방법을 사용하여 한 스프레드 시트에서 다른 스프레드 시트로 범위를 복사 할 때 대상 범위를 지정할 때 보통 sheet.getLastRow()+1을 사용합니다. 예 :range.copyTo가 익숙하지 않음 Apps Script

var oldRange = sheet.getRange(1, 1, 1, sheet.getLastColumn()); 

var newRange = destSheet.getRange(destSheet.getLastRow()+1, 1, 1, sheet.getLastColumn()); 

destSheet가 추가 또는이없는 경우 하단에 "빈"행의 range.copyTo() 방법은 데이터를 복사하지 않으며 오류 메시지가 발생하지 않습니다. 이 동일한 논리를 사용하고 .getValues().setValues()을 사용하면 새 행이 자동으로 내 destSheet에 추가됩니다.

range.copyTo()은 필요한 경우 추가 행을 생성 할 것으로 예상됩니다. excepcted로 작동합니까? 아니면 버그입니까?

답변

3

당신이 당신의 newRange 문에 .setValue를 ('')를 추가하는 경우는 이상의 행이 자동으로 데이터가 복사 될 대상 시트에 추가됩니다 오류 메시지가 표시됩니다.

var newRange = sh.getRange(ss.getLastRow()+1, 1).setValue(''); 
    oldRange.copyTo(newRange) 

어쨌든,이 정말 때문에의 가장 좋은 해결되지 않습니다 :이 같은 the docs

했다대로 전체 dest.range를 정의해서는 안 참고 만 왼쪽 상단 셀 관련 오류 메시지 (죄송합니다. 서버에서 오류가 발생했습니다 : 시트를 새로 고치려면 "확인"을 누르십시오.) (당신이 사항 copyTo 전에 insertRowAfter(ss.getLastRow())을 사용할 수 있습니다) 및 : 내가 바로 생각하지 않은 좋은 해결 방법은 실제로이 : 나는 1 개의 합리적이 버그 고려할 수 있고이 here

편집에 문제를 제기 수도 있겠죠 모든 것이 잘 작동합니다. 1 개 이상의 행이 예처럼 필요에 따라 반복 필요한 경우

물론
var oldRange = sh.getRange(1, 1, 1, ss.getLastColumn()); 
    var newRange = sh.getRange(ss.getLastRow()+1, 1); 
    ss.insertRowAfter(ss.getLastRow()) 
    oldRange.copyTo(newRange) 

, : 예

function copyToTest() { 
    var oldRange = sh.getRange(1, 1, 5, ss.getLastColumn());// 5 rows in this example 
    var newRange = sh.getRange(ss.getLastRow()+1, 1); 
    for(n=0;n<oldRange.getLastRow();++n){ss.insertRowAfter(ss.getLastRow())} 
    oldRange.copyTo(newRange) 
} 
+0

난 당신이 제안 링크를 사용하여 버그를 제출했다. 다시 돌아올 때까지 insertRowAfter를 사용하여 코드를 작성합니다. 당신의 도움을 주셔서 감사합니다. –