예시

코드

// ==============================================================================
//  IA 테마로 현재 시트의 모든 셀 테두리 설정
//  - maxColumns: 목표 열(1 = A, 2 = B, ...)
//  - titleColumnCount : 무시할 타이틀 컬럼 개수
// ==============================================================================
function makeSheetThemeIA(maxColumns, titleColumnCount=1) {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var range = sheet.getDataRange();
  var values = range.getValues();

  const BORDER_1 = SpreadsheetApp.BorderStyle.SOLID;
  const BORDER_2 = SpreadsheetApp.BorderStyle.SOLID_MEDIUM;
  const COL_WHITE = "white";
  const COL_GRAY  = "#b7b7b7";
  const COL_BLACK = "black";
  
  for (var i = titleColumnCount - 1; i < values.length; i++) {
    // 지정된 열까지 비어 있는지 확인하고, 비어 있지 않은 첫 번째 열의 인덱스 탐색
    var firstNonEmptyColumn = -1;
    for (var j = 0; j < maxColumns && j < values[i].length; j++) {
      if (values[i][j] !== '') {
        firstNonEmptyColumn = j;
        break;
      }
    }
    
    // 기본: 모든 라인 테두리 설정
    for (var k = 0; k < range.getNumColumns(); k++) {
      // 상하 라인 하얀색
      range.getCell(i + 1, k + 1).setBorder(true, null, true, null, null, null, COL_WHITE, BORDER_1);
      // 좌우 라인 회색
      range.getCell(i + 1, k + 1).setBorder(null, true, null, true, null, null, COL_GRAY, BORDER_2);
    }
    
    // 모든 지정된 열이 비어 있는 경우 생략
    if (firstNonEmptyColumn == -1) continue;

    // 비어 있지 않은 첫 번째 열 이전의 모든 열에 대해 위쪽 테두리를 하얀색 1px로 설정
    for (var k = 0; k < firstNonEmptyColumn; k++) {
      range.getCell(i + 1, k + 1).setBorder(true, null, null, null, null, null, COL_WHITE, BORDER_1);
      range.getCell(i + 1, k + 1).setBorder(true, null, null, null, null, null, COL_WHITE, BORDER_1);
    }

    // A: 굵은 검정, B: 검정, C ~ : 회색
    const lineWidth = firstNonEmptyColumn === 0 ? BORDER_2 : BORDER_1;
    const lineCol   = firstNonEmptyColumn <= 1 ? COL_BLACK : COL_GRAY;

    for (var k = firstNonEmptyColumn; k < range.getNumColumns(); k++) {
      range.getCell(i + 1, k + 1).setBorder(true, null, null, null, null, null, lineCol, lineWidth);
    }

  }
  // 마지막 라인은 하단 굵은 검정 라인
  for (var k = 0; k < range.getNumColumns(); k++) {
    range.getCell(values.length, k + 1).setBorder(null, null, true, null, null, null, COL_BLACK, BORDER_2);
  }
}

function makeSheetThemeIA_2() { makeSheetThemeIA(2, 1); }
function makeSheetThemeIA_3() { makeSheetThemeIA(3, 1); }