직무스킬_엑셀/스프레드시트

Apps script 월별 업무목록 시각화 (구글스프레드시트 업무관리 템플릿)

0
Please log in or register to do it.

구글스프레드시트 업무관리 템플릿을 만드는 일은 언제나 그렇듯이 얼마나 ‘효과적인 업무 관리’가 가능하느냐에 초점이 맞춰져야 합니다. 너무 복잡하면 쓰기가 좀 그렇고 그렇다고 너무 공수가 많이 들면 쓰다가 지치기 마련이죠. 이전에도 심플한 업무 체크리스트 등을 만들어 보았지만 이번에는 조금 더 대규모 단위 프로젝트를 핸들링할 때 쓸만한 템플릿을 제작해 보았습니다.

기본적인 업무관리 템플릿을 만드는 플로우

  1. 템플릿 설계:
    • 시트 구성: 다양한 시트를 만들어 각기 다른 정보를 관리할 수 있습니다. 예를 들어, ‘업무 목록’, ‘프로젝트 상태’, ‘팀 멤버’, ‘마감일 일정’ 등의 시트가 있을 수 있습니다.
  2. 업무 목록 시트:
    • 열 제목에는 ‘업무 ID’, ‘업무 설명’, ‘담당자’, ‘우선순위’, ‘시작일’, ‘마감일’, ‘상태’, ‘진행률’ 등이 포함될 수 있습니다.
    • 각 행에는 구체적인 업무 정보를 입력합니다.
  3. 프로젝트 상태 시트:
    • 이 시트는 전반적인 프로젝트의 진행 상황을 보여줍니다.
    • ‘프로젝트 이름’, ‘총 업무 수’, ‘완료된 업무 수’, ‘진행 중인 업무 수’, ‘미시작 업무 수’ 등의 열이 있을 수 있습니다.
  4. 팀 멤버 시트:
    • 팀원들의 정보를 관리합니다.
    • ‘이름’, ‘역할’, ‘이메일’, ‘연락처’ 등의 열을 포함할 수 있습니다.
  5. 마감일 일정 시트:
    • 각 업무의 마감일을 캘린더 형식으로 표시합니다.
    • 이를 통해 마감일을 쉽게 파악하고 관리할 수 있습니다.
  6. 데이터 유효성 검사:
    • 드롭다운 메뉴, 체크박스 등을 사용하여 데이터 입력을 표준화하고 오류를 줄일 수 있습니다.
    • 예를 들어, ‘상태’ 열에는 ‘진행 중’, ‘완료’, ‘보류’ 등의 드롭다운 목록을 만들 수 있습니다.
  7. 조건부 서식:
    • 마감일이 다가오거나 지연된 업무를 시각적으로 강조하기 위해 조건부 서식을 사용할 수 있습니다.
    • 예를 들어, 마감일이 3일 이내인 업무는 빨간색으로 표시될 수 있습니다.
  8. 공유 및 협업:
    • 구글 스프레드시트의 공유 기능을 사용하여 팀원들과 템플릿을 공유하고, 함께 작업할 수 있습니다.
  9. 자동화 및 통합:
    • 구글 스크립트나 다른 통합 도구를 사용하여 데이터를 자동으로 업데이트하고, 이메일 알림 등의 기능을 추가할 수 있습니다.

무료 코드

function updateCalendar() {
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var taskSheet = spreadsheet.getSheetByName("업무 목록");
  var calendarSheet = spreadsheet.getSheetByName("캘린더");
  var tasks = taskSheet.getRange(2, 1, taskSheet.getLastRow()-1, 7).getValues();
  
  calendarSheet.clear(); // 캘린더 시트 초기화
  // 캘린더 시트 설정을 여기에 추가하세요. 예: 날짜 레이블, 서식 등

  tasks.forEach(function(task) {
    var startDate = new Date(task[4]);
    var endDate = new Date(task[5]);
    for (var d = startDate; d <= endDate; d.setDate(d.getDate() + 1)) {
      var dayCell = findCell(calendarSheet, d);
      if (dayCell) {
        calendarSheet.getRange(dayCell.row, dayCell.column).setValue(task[0]); // 업무 ID 삽입
      }
    }
  });
}

function findCell(sheet, date) {
  var range = sheet.getDataRange();
  var values = range.getValues();
  
  for (var r = 0; r < values.length; r++) {
    for (var c = 0; c < values[r].length; c++) {
      if (values[r][c].getTime() === date.getTime()) {
        return {row: r+1, column: c+1};
      }
    }
  }
  return null;
}
스크립트 실행:

스크립트 편집기에서 updateCalendar 함수를 실행하여 캘린더를 업데이트합니다.
스케줄러 설정 (선택사항):

스크립트 편집기에서 트리거를 설정하여 이 스크립트를 정기적으로 자동 실행되도록 설정할 수 있습니다.
이 스크립트는 기본적인 기능을 제공합니다. 추가 기능이나 더 복잡한 요구 사항에 따라 스크립트를 수정하거나 확장할 수 있습니다.

자동으로 캘린더를 생성한다면?

Apps script를 통해 주단위 캘린더를 만들 수 있고 이를 updateCalendar 함수 이전에 실행하면 됩니다.

function generateWeeklyCalendar(calendarSheet, startDate) {
  var oneDay = 24 * 60 * 60 * 1000; // 하루의 밀리초
  var oneWeek = oneDay * 7; // 일주일의 밀리초
  var currentDate = new Date(startDate.getTime()); // 현재 날짜

  for (var row = 2; row <= 10; row++) { // 2개월간의 주를 가정
    calendarSheet.getRange(row, 1).setValue("Week " + (row - 1)); // 주 번호 설정
    for (var col = 2; col <= 8; col++) {
      if (currentDate.getMonth() < startDate.getMonth() + 2) {
        calendarSheet.getRange(row, col).setValue(currentDate);
        currentDate = new Date(currentDate.getTime() + oneDay);
      }
    }
  }
}

function mapTasksToCalendar(calendarSheet, task, startDate, endDate) {
  var startRow = 2; // 캘린더 시작 행
  var calendarRange = calendarSheet.getRange(2, 2, 9, 7); // 캘린더 날짜 범위
  var calendarValues = calendarRange.getValues();

  calendarValues.forEach(function(week, rowIndex) {
    week.forEach(function(day, colIndex) {
      if (day >= startDate && day <= endDate) {
        var cell = calendarSheet.getRange(startRow + rowIndex, colIndex + 2);
        var existingValue = cell.getValue();
        cell.setValue(existingValue + (existingValue ? ', ' : '') + task[0]); // 업무 ID 추가
      }
    });
  });
}

이렇게 하면 주단위로 캘린더가 만들어지고 mapTasksToClaendar 함수에 따라 업무 내용이 자동으로 기입이 됩니다. 아래 예시처럼요.

최종 결과물

[No Code] 행사 참석자 QR 인증 전자방명록 개발하기
삼성페이x네이버페이 3천원 받아가세요

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다