doSave와 같은 저장 함수를 이용하면, 저장 완료 후 시트가 갱신되며, 기존의 포커스를 잃고 최상단으로 스크롤이 이동됩니다.


이때, 임의의 외부 변수를 두어 현재 행(Row) 객체를 담아두고, 조회가 완료된 뒤 동작하는 이벤트 onSearchFinish에서 추출한 행(Row) 객체를 이용하여 스크롤을 저장하기 전 위치로 이동할 수 있습니다.

//임의의 행 객체를 담을 변수
var tempRow = null;
//스크롤의 위치를 담을 변수
var tempScroll = null;

//저장 기능 이용 시, 임의의 function save
function save() {
  //변수가 비어 있을 경우, 마지막 focus
  if(tempRow == null) {
    tempRow = sheet.getFocusedRow();
    tempScroll = sheet.getScrollTop();
  }
  sheet.doSave();
}

//조회 후 동작하는 이벤트
onSearchFinish: function(evt) {
  if(tempRow != null) {
    //시트의 포커스를 저장 전에 위치하던 행(Row)로 지정, 현재의 Row객체와 저장한 Row객체는 다른 객체이기 때문에 동일한 값을 가지는 id로 행(Row) 객체 호출
    evt.sheet.focus(evt.sheet.getRowById(tempRow.id));
    //저장 전에 위치했던 위치로 이동시킵니다.
    evt.sheet.setScrollTop(tempScroll);

    //스크롤 이동 후, 변수 초기화
    tempRow = null;
    tempScroll = null;
  }
}