# 월별 스프레드시트 일괄 숨기기

/** @OnlyCurrentDoc */
var DAY_28 = 28, DAY_29 = 29, DAY_30 = 30, DAY_31 = 31;
var arrMonthDay = [DAY_31, DAY_28, DAY_31, DAY_30, DAY_31, DAY_30, DAY_31, DAY_31, DAY_30, DAY_31, DAY_30, DAY_31];
var arrSheet = ['상품', '전시', '캠페인', '주문', '회원','물류/정산', '외부연동'];

function onOpen() {
  createMenuWithSubMenu();
}

function createMenuWithSubMenu() {
  var subMenu1 = SpreadsheetApp.getUi().createMenu("숨기기")
    .addItem("4월숨기기", "hideMonth")
  var subMenu2 = SpreadsheetApp.getUi().createMenu("보이기")
    .addItem("4월보이기", "showMonth")
  
  SpreadsheetApp.getUi().createMenu("⚙️월 관리")
    .addItem("4월 숨기기", "hideMonth")
    .addItem("4월 보이기", "showMonth")
    // .addSubMenu(subMenu1)
    // .addSeparator()
    // .addSubMenu(subMenu2)
    .addToUi();
}

function removeMenu() {
    SpreadsheetApp.getActiveSpreadsheet().removeMenu("⚙️월 관리");
}

// 월 숨기기
function hideMonth(month=3) {
  var activeSpreadSheet = SpreadsheetApp.getActiveSpreadsheet();
  // 윤년 체크
  if (isLeapYear()) arrMonthDay[1] = DAY_29;  
  for (var sheetIndex = 0; sheetIndex < arrSheet.length; sheetIndex++){
    monthIndex = month;
    var spreadsheet = activeSpreadSheet.getSheetByName(arrSheet[sheetIndex]);
    spreadsheet.hideColumns(calcIndex(monthIndex), arrMonthDay[monthIndex]);
  }
};

// 월 보이기
function showMonth(month=3) {
  var activeSpreadSheet = SpreadsheetApp.getActiveSpreadsheet();
  // 윤년 체크
  if (isLeapYear()) arrMonthDay[1] = DAY_29;
  for (var sheetIndex = 0; sheetIndex < arrSheet.length; sheetIndex++){
    monthIndex = month;
    var spreadsheet = activeSpreadSheet.getSheetByName(arrSheet[sheetIndex]);
    spreadsheet.showColumns(calcIndex(monthIndex), arrMonthDay[monthIndex]);
  }
};

function myFunction(month) {
  var activeSpreadSheet = SpreadsheetApp.getActiveSpreadsheet();
  // 윤년 체크
  if (isLeapYear()) arrMonthDay[1] = DAY_29;
  
  // 1. 컬럼 사이즈 조정
  var arrColumnWidth = [10, 40, 40, 40, 55, 80, 60, 400, 40, 40, 40, 60, 60, 60, 60, 60]
  for (var sheetIndex = 0; sheetIndex < arrSheet.length; sheetIndex++){
    var spreadsheet = activeSpreadSheet.getSheetByName(arrSheet[sheetIndex]);
    for(var columnIndex = 0; columnIndex < arrColumnWidth.length; columnIndex++) {
      spreadsheet.setColumnWidth(columnIndex + 1, arrColumnWidth[columnIndex]);
    }
    spreadsheet.setColumnWidths(arrColumnWidth.length + 1, 380 - arrColumnWidth.length, 18);
  }

  // 2. 월별 날짜 숨기기 (숨기기 진행할 월을 추가)
  var arrHideMonth = [1,2,3,4];
  var hideHalf = true;

  for (var sheetIndex = 0; sheetIndex < arrSheet.length; sheetIndex++){
    var spreadsheet = activeSpreadSheet.getSheetByName(arrSheet[sheetIndex]);
    // 2.1. 매월 숨김처리
    for(var monthIndex = 0; monthIndex < 12; monthIndex++) {

      spreadsheet.showColumns(calcIndex(monthIndex), arrMonthDay[monthIndex]);
      if(arrHideMonth[monthIndex] != null) spreadsheet.hideColumns(calcIndex(monthIndex), arrMonthDay[monthIndex]);
    }
    // 2.2. 월 절반만 보이기
    if(hideHalf) spreadsheet.showColumns(calcIndex(arrHideMonth.length -1) + 15, arrMonthDay[arrHideMonth.length -1] - 15);
  }
};

// 월계산
function calcIndex(param){
  var startIndex = 17;
  return param == 0 ? startIndex : arrMonthDay.slice(0, param).reduce((a,b) => (a+b)) + startIndex;
}

// 윤년체크
function isLeapYear(year=2024) {
    // var year = new Date().getFullYear();
    return (year % 4 === 0 && year % 100 !== 0) || (year % 400 === 0);
}

// guide
function guide() {
  // var spreadsheet = SpreadsheetApp.getActive();
  // spreadsheet.getRange('P163:NP163').activate();
  // spreadsheet.getRange('P163').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);
  // Logger.log('실행');

  SpreadsheetApp.getActive().toast("You selected Setting A.");
  SpreadsheetApp.getUi().alert("실행완료");
  const activeSpreadSheet = SpreadsheetApp.getActiveSpreadsheet();
  var spreadsheet = activeSpreadSheet.getSheetByName('상품');
  // spreadsheet.insertColumns(1);
  Logger.log(spreadsheet.getMaxColumns());

  // var range = spreadsheet.getRange("P:AT");
  // spreadsheet.hideColumn(range);
}

# google sheet query

=QUERY({'상품'!B4:P64;'전시'!B4:P65;'캠페인'!B4:P55;'주문'!B4:P142;'회원'!B4:P94;'외부연동'!B4:P79';물류/정산'!B4:P63}, "SELECT '4월', Col2, Col5, Col4, Col7, Col10, Col1, Col3, Col12, Col13, Col14, Col15 WHERE (Col6 = '개발' and (Col14 >= DATE'2024-02-01' OR Col14 is null)) ORDER BY Col10 desc, Col14,Col1, Col7",0)
Last Updated: 4/13/2025, 11:14:44 PM