2012-11-05 2 views
0

Google 내 스크립트를 사용하여 매우 어려움을 겪고 있습니다.스프레드 시트에서 행을 삭제할 때 google-script에 오류가 발생합니다.

헤더 행을 남기고 Form 스프레드 시트의 모든 행을 삭제하는 함수를 작성하려고했습니다.

이 작품 않는 이유를 다음 동안

// Loop through the data in the range and delete the rows 
if (data.length > 1) { 
    for (var row = 1; row < data.length; row++) { 
    ws.deleteRow(row+1); 
    } 
    ws.deleteRow(2); 

} 

을 : 행 인덱스 1을 기반으로하기 때문에

if (data.length > 1) { 
    for (var row = 1; row < data.length; row++) { 
    ws.deleteRow(row+1); 
    } 

    } 

답변

0

뒤에 행이 잎 (즉, 1부터 시작) , for 루프를 다음과 같이 변경해야합니다.

for (var row = 1; row <= data.length; row++) { 

두 행이 있다고 가정하면 루프의 두 번째 행 (행 = 2 일 때)에 도달하면 row의 값은 data.length (즉 2)보다 작지 않습니다. 에서 data.length까지입니다. 따라서 <을 사용하면 테스트가 실패하고 루프의 코드가 두 번 실행되지 않습니다. <=으로 전달되고 원하는대로 코드가 실행됩니다.

물론이 패턴은 모든 행 수에서 발생합니다.

편집 : 몇 가지 다른 문제가 : 제거가 즉시 일어날 것 때문에

, 행은 모두 제거 후 변화와는 다른 번호가 될 것입니다. 이것은 몇 가지 방법으로 처리 할 수 ​​있지만 여기에 하나가 있습니다 : 삭제를 끝에서 시작하여 뒤로 변경하십시오. 그래서 지금 우리가 가진 : 시작 위치를

for (var row = data.length; row >= 1; row--) { 

을 또한, 당신은 단지 헤더 행으로, 첫 번째 행을 생략하려는 경우, 즉 사용 된 인덱스를 변경 오히려 (예를 들어, row + 1), 단지 변경/루프를 멈추십시오. 이것은 더 간단하고 이해하기 쉽습니다. 루프는 다음과 같이됩니다.

for (var row = data.length; row >= 2; row--) { 
    ws.deleteRow(row); 
} 
+0

정확하게 2 행이있는 경우에 작동합니다. 그러나 세 번째 행을 추가하면 행 2가 추가 선없이 삭제되지 않습니다. – raf

+0

OK 고맙습니다. 고맙습니다. 나는 행이 다시 갈 때 그 행이 재정렬되었음을 깨닫지 못했습니다. – raf

관련 문제