이런 분께
사무실 임대차 계약 갱신, 화재보험 만기, 도메인 연장처럼 1년에 한 번 오는 회사 기한을 머릿속이나 포스트잇으로 챙기다가 한 번쯤 놓쳐 본 대표님께 맞아요. 구글 시트에 목록만 적어 두면 구글 캘린더에 종일 일정과 알림이 한꺼번에 들어가게 만들어요.
끝나면 이렇게 됩니다
시트에 기한 3줄을 적고 스크립트를 한 번 돌리면 이렇게 돼요. 아래는 이 실행 안에서 같은 코드를 가짜 시트·캘린더에 연결해 돌려 본 기록이에요.
[기한] 사무실 임대차 계약 갱신 2026-12-15 알림 28일 전(팝업·메일)
[기한] 화재보험 만기 2026-11-30 알림 7일 전(팝업·메일)
[기한] 회사 도메인 연장 2027-01-20 알림 7일 전(팝업·메일)
시트 E열: 등록됨 2026-11-07 / 화면 아래: "3건을 캘린더에 넣었어요"
E열에 "등록됨"이 찍힌 줄은 다음에 돌려도 다시 넣지 않아요. 새 기한이 생기면 줄만 추가하고 한 번 더 누르면 돼요.
준비물
- 구글 계정(무료). 구글 시트, 구글 캘린더, Apps Script(앱스 스크립트, 구글 문서·시트에 붙여 쓰는 작은 프로그램)는 2026년 11월 기준 개인 계정에서 무료로 써요.
- 처음 실행할 때 "이 스크립트가 내 캘린더와 시트에 접근해도 되는지" 묻는 권한 창이 떠요. 내 계정으로 내가 만든 스크립트에만 허용해요.
- 코드는 아래 그대로 붙여 넣으면 돼요. 바꾸고 싶으면 클로드나 챗GPT에 코드와 바꿀 점을 같이 주면 돼요.
따라 하기
- 구글 시트를 새로 만들고 아래쪽 시트 탭 이름을 「기한」으로 바꿔요.
- 1행에 항목, 날짜, 알림일, 메모, 등록을 A~E열에 적어요. 2행부터 기한을 한 줄씩 적어요. 날짜 칸은 2026-12-15처럼 써서 날짜로 인식되게 해요(셀이 오른쪽 정렬되면 날짜로 읽힌 거예요). 알림일은 며칠 전에 알려 줄지 숫자로, 비우면 7일이에요.
- 메뉴 「확장 프로그램」 → 「Apps Script」를 눌러요. 새 탭에 편집기가 열려요.
- 편집기에 있던
function myFunction() {}를 지우고 아래 코드를 붙여 넣은 뒤 저장(디스크 모양 아이콘)을 눌러요. - 위쪽 함수 선택 칸이 「기한_캘린더_등록」인지 보고 「실행」을 눌러요.
- 「권한 검토」 창이 뜨면 내 계정을 고르고 「허용」을 눌러요. 확인되지 않은 앱이라는 화면이 나오면 「고급」 → 「(프로젝트 이름)(으)로 이동」을 눌러요. 내가 방금 붙여 넣은 코드라서 나오는 안내예요.
- 시트로 돌아가 E열에 "등록됨"이 찍혔는지, 구글 캘린더에 [기한] 일정이 생겼는지 봐요.
복사해서 쓰는 프롬프트
붙여 넣을 코드예요.
function 기한_캘린더_등록() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('기한');
const rows = sheet.getDataRange().getValues();
const cal = CalendarApp.getDefaultCalendar();
let count = 0;
for (let i = 1; i < rows.length; i++) {
const [항목, 날짜, 알림일, 메모, 등록] = rows[i];
if (!항목 || !(날짜 instanceof Date) || 등록) continue;
const event = cal.createAllDayEvent('[기한] ' + 항목, 날짜, { description: 메모 || '' });
const days = Number(알림일) || 7;
event.addPopupReminder(Math.min(days * 1440, 40320));
event.addEmailReminder(Math.min(days * 1440, 40320));
sheet.getRange(i + 1, 5).setValue('등록됨 ' + Utilities.formatDate(new Date(), 'Asia/Seoul', 'yyyy-MM-dd'));
count++;
}
SpreadsheetApp.getActiveSpreadsheet().toast(count + '건을 캘린더에 넣었어요');
}
