2013-02-25 6 views
0

어리석은 질문에 대해 사과드립니다. Google 문서 도구에서 JS 및 스크립팅을 완전히 처음 접했습니다.Google 스프레드 시트 루핑 및 셀 값 검색

행의 첫 번째 열에 "수신 됨"또는 "취소됨"이라는 단어가있는 Google 스프레드 시트의 모든 행을 삭제하는 코드를 작성하려고합니다. 나는 내가 실행 대본을 볼 때

이 마지막 조치를 말한다 나는 "범위를 벗어난 셀 참조"오류를 받기를 실행하려고하면

function DeleteClosedRows() { 

    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var end = SpreadsheetApp.getActiveSheet().getLastRow(); 
    for(var i = 3; i < end + 1; ++i) { 
     var value = ss.getActiveRange().getCell(i, 1).getValue(); 
     if (value === "Received" && value === "Canceled") { 
      sheet.deleteRows(i); 
     }; 
    }; 
}; 

: 여기

내 현재 코드입니다 taken : Range.getCell ([3,1])

.. 내 코드에는 100 가지 문제가있을 것이라고 확신하지만 지금은 문제가되는 것을 막는 첫 번째 문제를 이해하고 싶습니다. 그 부분을 지나쳐라.

도움 주셔서 감사합니다.

+1

질문과 관련이 없지만 '&&'를 '||'로 변경하려고합니다. 이것은 AND와 OR로 변경됩니다. 값이 "Received"인지 또는 값이 "Canceled"인지 확인하려고합니다. –

답변

1

코드가 실패하는 이유는 .getActiveRange()이 현재 사용자가 선택한 셀 범위를 반환하기 때문입니다. 이것은 당신이 원하는 것이 아닙니다. 대신 단일 셀로 구성된 시트에서 범위를 가져 오려고합니다. 이런 식으로 뭔가 : 두 개의 인수의 기능

var value = ss.getRange(i, 1).getValue(); 

.getRange 당신이 .getCell을 기대 똑같이.

참고 :. 당신이 .getRange를 호출 할 때, 당신은 당신이 스프레드 시트에서 여러 셀을 선택할 수 있습니다처럼 세포 (의 전체 범위를 얻을 수 있습니다 당신이 .getValue를 호출 할 때 그런 다음 셀의 값을 얻을 그 범위 성능을

참고 :... 당신은 .getValues를 호출하여 한 번에 세포의 전체 범위의 값을 검색 할 수 있습니다 이것은 한 번에 모든 값을 포함하는 2 차원 배열을 반환 이것은을 얻는 것보다 훨씬 빠르다 한 번에 하나의 셀 값.

또한이 점을 설명하는 몇 가지 링크 된 답변 : Link 1Link 2

+2

전체 범위의 셀을 호출하여 루프에서 작업하는 경우 Phil이 수행 할 수 있음을 나타내면 루프가 뒤로 이동해야합니다 (예 : for (var i = rangeValues.length-1; i> 0; i--). 그래서 그 루프 동안 행을 지울 때, 아직 남아있는 루프의 길이에는 영향을주지 않습니다; 따라서 루프의 i 변수는 삭제하려는 deleteRows (i)의 i에 해당하는 데 안전하게 사용될 수 있습니다. 그렇지 않으면 삭제 된 두 번째 및 후속 행이 예상 된 행이 아닐 것입니다. –

+0

좋은 지적입니다. 이 답변을 입력 할 때 행을 삭제하는 것이 목표라는 것을 잊었습니다. 설명 주셔서 감사합니다! –

+0

@ Phil, 귀하의 도움에 많은 시간을드립니다.이 포럼에 어떤 활력을 불어 넣을 수 있습니까? 당신이 권장하는 변경 내용을 적용하여 줄을 읽습니다. var value = ss.getRange (i, 1) .getValue(); 하지만 지금은 내가 얻는 오류입니다 : 메소드 (클래스)를 찾을 수 없습니다. getRange (number, number) 일단이 부분을 이해하면 getValues를 사용하여 코드를보다 효율적으로 만들려고합니다. 다시 한 번 감사드립니다. 너의 도움으로! – DKappy

관련 문제