-
Apps Script 행 높이 지정 메소드 오류 해결 방법AppsScript 2023. 12. 13. 23:18
setRowHeight 메소드를 사용하여 특정 행의 높이를 설정하려고 하는 것을 확인할 수 있습니다. 그러나 코드의 현재 구조에서는 setRowHeight 메소드가 예상대로 작동하지 않을 수 있는 몇 가지 이유가 있습니다.
- 비동기 처리 문제: Google Apps Script의 특정 API 호출(특히 Google Drive 및 Document 관련 API)은 비동기적으로 처리될 수 있습니다. 이로 인해 스크립트의 후속 부분이 API 호출의 완료 전에 실행되어, setRowHeight가 적절한 시점에 호출되지 않을 수 있습니다.
- 스프레드시트 업데이트 지연: Google Sheets API는 때때로 변경 사항을 즉시 반영하지 않을 수 있습니다. 즉, 셀에 데이터를 쓴 직후에 행 높이를 설정하려고 하면, 스프레드시트가 아직 새로운 데이터를 완전히 반영하지 않았을 수 있습니다.
- 오류 또는 제한 사항: setRowHeight 메소드가 예상대로 작동하지 않는다면, 스크립트에 오류가 있거나 Google Sheets API의 내부 제한 사항에 부딪힌 것일 수 있습니다.
해결 방법
- 스크립트 로그 추가: 스크립트에서 setRowHeight가 호출되는 시점과 해당 행 번호를 로그로 남겨 디버깅해보세요. Logger.log(lastRow)를 사용하여 해당 행 번호를 확인할 수 있습니다.
- 스프레드시트 새로고침: 데이터를 기록한 후에 스프레드시트를 새로고침하는 코드를 추가해보세요. 예를 들어, SpreadsheetApp.flush()를 사용하여 스프레드시트의 변경 사항을 즉시 적용할 수 있습니다.
- 스크립트 실행 지연: 데이터를 쓰고 setRowHeight를 호출하기 전에 스크립트 실행을 잠시 지연시키는 것을 고려해볼 수 있습니다. 예를 들어, Utilities.sleep(1000)을 사용하여 1초간 대기할 수 있습니다.
디버깅
Logger.log(lastRow)를 사용하여 행 번호를 로깅하려면, 스크립트에서 setRowHeight를 호출하기 바로 전에 이 코드를 추가해야 합니다. 이렇게 하면, setRowHeight가 호출되기 직전에 처리되는 행 번호가 무엇인지 확인할 수 있습니다.
코드에서 lastRow 변수는 마지막 행 번호를 결정한 후에 설정되므로, setRowHeight 메소드를 호출하기 바로 전에 Logger.log를 추가합니다.
// 마지막 행 찾기 var lastRow = sheet.getLastRow() + 1; // 로깅하여 마지막 행 번호 확인 Logger.log(lastRow); // B열부터 데이터 기록 및 하이퍼링크 적용 sheet.getRange(lastRow, 2).setValue(docTitle); // B열 sheet.getRange(lastRow, 3).setValue(docBody); // C열 sheet.getRange(lastRow, 4).setValue(url); // D열 // 행 높이 설정 var rowHeight = 21; // 행 높이를 21픽셀로 설정 sheet.setRowHeight(lastRow, rowHeight);
이렇게 수정한 후 스크립트를 실행하면, Google Apps Script 편집기의 "로그 보기" 옵션을 통해 lastRow의 값을 확인할 수 있습니다. 이 정보는 스크립트가 올바른 행에 작업을 수행하고 있는지 확인하는 데 도움이 됩니다. 로그는 스크립트 실행 후 "실행" 메뉴에서 "로그 보기"를 선택하여 확인할 수 있습니다.
스프레드시트 새로고침
SpreadsheetApp.flush()는 스프레드시트의 모든 보류 중인 변경사항을 즉시 적용하는 데 사용됩니다. 이 메소드는 데이터를 쓰고, 행 높이를 설정한 후에 호출하는 것이 좋습니다. 이렇게 하면, 스프레드시트의 변경사항이 먼저 처리되고, 그 후에 행 높이 설정이 적용됩니다.
따라서, SpreadsheetApp.flush()를 setRowHeight 메소드 호출 바로 다음에 넣는 것이 적절합니다. 다음은 코드 예시입니다:
// 마지막 행 찾기 var lastRow = sheet.getLastRow() + 1; // B열부터 데이터 기록 및 하이퍼링크 적용 sheet.getRange(lastRow, 2).setValue(docTitle); // B열 sheet.getRange(lastRow, 3).setValue(docBody); // C열 sheet.getRange(lastRow, 4).setValue(url); // D열 // 행 높이 설정 var rowHeight = 21; // 행 높이를 21픽셀로 설정 sheet.setRowHeight(lastRow, rowHeight); // 스프레드시트의 변경사항 적용 SpreadsheetApp.flush();
이렇게 수정한 후 스크립트를 실행하면, setRowHeight 메소드가 올바르게 작동하는지 확인할 수 있습니다. 만약 여전히 문제가 발생한다면, setRowHeight 메소드의 사용 방식이나 스크립트의 다른 부분에서 문제가 발생했는지 추가로 확인이 필요합니다.
실행 지연
스크립트 실행 지연을 위해 Utilities.sleep(milliseconds) 함수를 사용하여 스크립트의 실행을 잠시 중단할 수 있습니다. 이 방법은 스크립트의 다른 부분이 완전히 처리된 후에 행 높이 설정을 시도하기 위해 사용됩니다. Utilities.sleep(milliseconds) 함수는 지정된 밀리초 동안 스크립트의 실행을 일시적으로 중지시킵니다.
행 높이 설정 전에 일정 시간을 지연시키기 위해, setRowHeight 메소드 호출 전에 Utilities.sleep(milliseconds)를 추가합니다. 예를 들어, 1초(1000 밀리초) 동안 대기하도록 설정할 수 있습니다.
// 마지막 행 찾기 var lastRow = sheet.getLastRow() + 1; // B열부터 데이터 기록 및 하이퍼링크 적용 sheet.getRange(lastRow, 2).setValue(docTitle); // B열 sheet.getRange(lastRow, 3).setValue(docBody); // C열 sheet.getRange(lastRow, 4).setValue(url); // D열 // 1초(1000 밀리초) 동안 실행 지연 Utilities.sleep(1000); // 행 높이 설정 var rowHeight = 21; // 행 높이를 21픽셀로 설정 sheet.setRowHeight(lastRow, rowHeight);
이렇게 수정한 후 스크립트를 실행하면, 데이터를 기록한 후 1초 동안 대기한 다음에 행 높이를 설정합니다. 이 방법이 효과적이지 않다면, 스크립트의 다른 부분에서 문제가 있거나, setRowHeight 메소드 자체에 제한이 있을 수 있습니다. 이 경우, 문제 해결을 위해 다른 접근 방식을 고려해야 할 수도 있습니다. 예를 들어, 행 높이를 설정하는 대신 셀의 내용에 맞게 행 높이가 자동으로 조절되도록 하는 방법 등이 있습니다.