Google Apps 스크립트 인 onChange가 변수에 트리거 개체를 전달할 수 없습니다. [중복]

Dec 28 2020

이 게시물은 닫혔지만 다른 곳에서 비슷한 문제를 찾을 수 없었습니다.

onChange () 트리거에서 행을 숨기는 스크립트를 작성하려고합니다. 셀이 "0"이되면 해당 셀이있는 행을 숨기고 싶습니다. 내 첫 번째 게시물의 의견은 onChange에서 전달 된 객체에 범위가 포함되어 있지 않다는 것을 알려주었습니다. 이 문제를 해결할 수있는 해결 방법이 있습니까?

내 스프레드 시트에는 백엔드 용 입력 시트와 클라이언트로가는 프런트 엔드 용 출력 시트가 있습니다. onChange 트리거가 필요하므로 데이터가 프런트 엔드로 이동함에 따라 클라이언트에 이메일을 보낼 수있는 형식이 좋습니다. 가장 중요한 것은 숨길 빈 ( '0) 행이 필요하다는 것입니다.

나는 새롭고 배우기 때문에 onChange 객체가 범위를 포함하지 않기 때문에 내가 작성한 내용이 작동하지 않습니다. 감사합니다.

function onChange(e) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("Client");
  var cell = e.range;
  var VALUE = cell.getValue(); 
  if(VALUE == 0){
        sheet.hideRow(cell);
  }
}

나는 또한 시도했다 :

function onChange(e) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("Client");
  var cell = e.getValue(); 
  if(cell == 0){
        sheet.hideRow(cell);
  }
}

답변

Cooper Dec 28 2020 at 03:57

onChange 트리거에서 반환 된 범위 값이 없습니다. 이벤트 객체는 다음과 같습니다.

{"authMode":"FULL","changeType":"INSERT_ROW","source":{},"triggerUid":"","user": {"email":","nickname":""}}

또한 onChange에는 설치 가능한 트리거가 필요합니다.

onChange 이벤트 객체

joshmeranda Dec 28 2020 at 04:00

방아쇠가 혼란스러워 보입니다 . 는 "큰"또는 구조적 변화가 아닌 변경된 값에 비해 발생 트리거 화재. 로부터 문서 :onChange onEditonChange

설치 가능한 변경 트리거는 사용자가 새 시트를 추가하거나 열을 제거하는 등 스프레드 시트 자체의 구조를 수정할 때 실행됩니다.

이벤트 개체 사양에서 onChange트리거 에서 프로그래머에게 전달 된 값이 없으므로 원하는 기능 유형이 쉽게 수행되지 않는다는 것을 알 수 있습니다.

onEdit찾고있는 것에 더 가깝게 작동 하는 트리거 를 사용하려고합니다 . 값 변경시 발생하고 새 값과 이전 값을 제공합니다. onEdit또한 " 간단한 트리거 "이므로 에서처럼 추가 트리거를 설치할 필요가 없습니다 onChange.

onEdit코드를 사용하면 다음과 같이 표시됩니다.

function onEdit(e) {
  val range = e.range;
  val sheet = SpreadsheetApp.getActiveSheet();

  if (e.value == 0) {
    var rowNum = e.range.getRow();
    sheet.hideRow(rowNum);
  }
}