셀을 하나씩 쓰지 마세요
루프 안에서 getRange(i, j).setValue()를 반복하면, 행이 늘어날수록 실행 시간이 급격히 길어집니다. 야간 집계가 타임아웃에 걸리는 가장 흔한 원인입니다.
한 번에 읽고, 한 번에 쓰기
필요한 범위를 2차원 배열로 읽은 뒤 메모리에서 계산하고, 결과 배열을 한 번의 setValues로 되돌립니다. 서식이 필요하면 데이터 쓰기와 서식 적용을 분리하세요.
빈 행과 헤더
데이터 끝 행을 잘못 잡으면 수천 행의 빈 칸까지 순회합니다. 헤더를 고정하고, 실제 값이 있는 마지막 행을 기준으로 범위를 잡는지 점검하세요.
언제 Advanced Sheets를 쓰나
단순 값 이동에는 SpreadsheetApp으로 충분합니다. 여러 시트를 한 요청에 묶거나 조건부 서식을 대량 변경할 때만 Advanced Service 비용을 감수합니다.