목적
구글 앱스 스크립트로 가장 마지막 행 번호를 구하는 방법을 이해합니다.
구글 앱스 스크립트로 가장 마지막 행의 값을 구하는 방법을 이해합니다.
가장 마지막 행 번호를 구하는 방법
가장 마지막 행 번호를 구할 필요성? 
앱스 스크립트에는 sheet.getLastRow() 가 있어서 한 시트의 가장 마지막 행 번호를 구하는 간단한 메소드가 존재합니다.
하지만 실제 개발을 하다보면 필요한 것은 특정한 열의 가장 마지막 행 번호를 구하는 것인데요.
예를 들어서, 다음과 같은 경우들이 자주 발생합니다.
•
데이터를 스크립트로 가져와서 현재 있는 데이터 맨아래에 붙여넣기 (Append) 해야 하는 경우
•
범위(Range)를 설정할 때 동적으로 해야하는 경우
가장 마지막 행 번호를 구하는 함수 
다음과 같은 함수를 프로젝트에서 사용하고 있습니다.
function lastrow_of_col(sheet_name, col) {
let lastrow = sheet_name.getMaxRows();
let col_values = sheet_name.getRange(col + '1:' + col + lastrow).getValues();
for (; col_values[lastrow - 1] == '' && lastrow > 0; lastrow--) { }
return lastrow
}
JavaScript
복사
여기서 sheet_name 은 다음과 같은 메소드로 시트를 명시해주어야 합니다.
let sheet_name = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('시트명')
col은 작은 따옴표로 감싸준 알파벳이어야 합니다.
'A'
원리 설명
원리는 간단합니다.
1.
sheet.getMaxRows() 메소드로 시트의 가장 마지막 행을 가져옵니다. 이 마지막 행은 우리가 원하는 열의 마지막 행보다는 항상 크거나 같을 것입니다. 데이터가 들어있지 않더라도 가장 마지막 행을 가져옵니다.
2.
지정한 열 (col)과 계산한 마지막 행 (lastrow)로 범위를 만들고, 값들을 가져옵니다.
3.
이제 반복문을 실행하는데, 가장 마지막 값부터 한 행 씩 올라오면서 값이 비어있고, 0보다 큰지 체크합니다. 반복하면서 마지막 행 값을 1씩 줄여나갑니다.
4.
값이 있다면 반복문을 중단하고 마지막 행 값 (lastrow) 을 리턴합니다.
예제 확인
다음과 같이 데이터가 들어있는 시트가 있습니다.
다음 코드로 시트의 가장 마지막 행을 확인할 수 있습니다.
function maxRow(){
let maxRow = SpreadsheetApp.getActiveSheet().getMaxRows()
Logger.log(maxRow)
}
// 결과: 시트의 마지막 행인 1000을 리턴합니다.
// 1000.0
JavaScript
복사
만약 데이터가 들어있는 마지막 행을 확인하고자 한다면, getMaxRows() 대신 getLastRow()를 사용할 수 있습니다.
이제 다음과 같이 파라미터를 넘겨줄 함수를 하나 작성합니다.
시트명은 LastRow 이고, 마지막 행을 확인할 열은 A열로 지정합니다.
미리 만들어둔 lastrow_or_col 함수에 파라미터로 두 값을 넘겨줍니다.
리턴받은 값을 lastrow 에 저장하고, 로그로 표시합니다.
function testFunc(){
const sheet_name = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('LastRow')
const col = 'A'
let lastrow = lastrow_of_col(sheet_name,col)
Logger.log(lastrow)
}
// 결과: A열의 맨 마지막 값인 15행이 표시됩니다.
// 15.0
JavaScript
복사
가장 마지막 행의 값을 구하는 방법
가장 마지막 행의 값을 구하는 함수
가장 마지막 행을 구하는 함수를 응용해서 다음과 같이 사용할 수 있습니다.
function lastrow_of_col_value(sheet_name, col) {
let lastrow = sheet_name.getMaxRows();
let col_values = sheet_name.getRange(col + "1:" + col + lastrow).getValues();
for (; col_values[lastrow - 1] == "" && lastrow > 0; lastrow--) { }
return sheet_name.getRange(col + lastrow).getValue();
}
JavaScript
복사