구글스프레드시트 업무관리 템플릿을 만드는 일은 언제나 그렇듯이 얼마나 ‘효과적인 업무 관리’가 가능하느냐에 초점이 맞춰져야 합니다. 너무 복잡하면 쓰기가 좀 그렇고 그렇다고 너무 공수가 많이 들면 쓰다가 지치기 마련이죠. 이전에도 심플한 업무 체크리스트 등을 만들어 보았지만 이번에는 조금 더 대규모 단위 프로젝트를 핸들링할 때 쓸만한 템플릿을 제작해 보았습니다.
기본적인 업무관리 템플릿을 만드는 플로우
- 템플릿 설계:
- 시트 구성: 다양한 시트를 만들어 각기 다른 정보를 관리할 수 있습니다. 예를 들어, ‘업무 목록’, ‘프로젝트 상태’, ‘팀 멤버’, ‘마감일 일정’ 등의 시트가 있을 수 있습니다.
- 업무 목록 시트:
- 열 제목에는 ‘업무 ID’, ‘업무 설명’, ‘담당자’, ‘우선순위’, ‘시작일’, ‘마감일’, ‘상태’, ‘진행률’ 등이 포함될 수 있습니다.
- 각 행에는 구체적인 업무 정보를 입력합니다.
- 프로젝트 상태 시트:
- 이 시트는 전반적인 프로젝트의 진행 상황을 보여줍니다.
- ‘프로젝트 이름’, ‘총 업무 수’, ‘완료된 업무 수’, ‘진행 중인 업무 수’, ‘미시작 업무 수’ 등의 열이 있을 수 있습니다.
- 팀 멤버 시트:
- 팀원들의 정보를 관리합니다.
- ‘이름’, ‘역할’, ‘이메일’, ‘연락처’ 등의 열을 포함할 수 있습니다.
- 마감일 일정 시트:
- 각 업무의 마감일을 캘린더 형식으로 표시합니다.
- 이를 통해 마감일을 쉽게 파악하고 관리할 수 있습니다.
- 데이터 유효성 검사:
- 드롭다운 메뉴, 체크박스 등을 사용하여 데이터 입력을 표준화하고 오류를 줄일 수 있습니다.
- 예를 들어, ‘상태’ 열에는 ‘진행 중’, ‘완료’, ‘보류’ 등의 드롭다운 목록을 만들 수 있습니다.
- 조건부 서식:
- 마감일이 다가오거나 지연된 업무를 시각적으로 강조하기 위해 조건부 서식을 사용할 수 있습니다.
- 예를 들어, 마감일이 3일 이내인 업무는 빨간색으로 표시될 수 있습니다.
- 공유 및 협업:
- 구글 스프레드시트의 공유 기능을 사용하여 팀원들과 템플릿을 공유하고, 함께 작업할 수 있습니다.
- 자동화 및 통합:
- 구글 스크립트나 다른 통합 도구를 사용하여 데이터를 자동으로 업데이트하고, 이메일 알림 등의 기능을 추가할 수 있습니다.
무료 코드
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 함수에 따라 업무 내용이 자동으로 기입이 됩니다. 아래 예시처럼요.