이 실습에서는 Google Sheets에서 특정 칼럼이 체크되면 Google Calendar에 자동으로 수업 일정을 추가하는 시스템을 구축합니다.
또한, 추가 실습으로 이벤트 생성 시 Slack으로 안내 메시지를 발송하는 기능도 구현합니다.
- Google Sheets에서 새로운 스프레드시트를 생성합니다.
- 첫 번째 행에 다음 헤더를 추가합니다:
A열
: 교과목 이름B열
: 교수님 이름C열
: 교수님 이메일D열
: 본인 휴대폰 번호E열
: 친구1 (이름 & 이메일)F열
: 친구2 (이름 & 이메일)G열
: 친구3 (이름 & 이메일)H열
: 친구4 (이름 & 이메일)I열
: 수업 시작 시간 (YYYY-MM-DD HH:MM)J열
: 수업 종료 시간 (YYYY-MM-DD HH:MM)K열
: 강의실L열
: 일정 생성 (체크박스 추가)
- **
L열(일정 생성)
**을 선택합니다. - 상단 메뉴 → 삽입 → 체크박스를 클릭하여 체크박스 추가
- 스프레드시트 상단 메뉴에서 확장 프로그램 → Apps Script를 클릭합니다.
아래 스크립트를 복사하여 입력합니다:
// Google Calendar ID 설정 (기본 캘린더 사용 시 'primary' 입력)
const CALENDAR_ID = 'primary';
const SLACK_WEBHOOK_URL = "YOUR_SLACK_WEBHOOK_URL"; // Slack 알림을 보낼 Webhook URL
function onEdit(e) {
const sheet = e.source.getActiveSheet();
const range = e.range;
const column = range.getColumn();
const row = range.getRow();
const generateColumn = 12; // L열(일정 생성) 체크박스 위치
// 체크박스가 클릭되었을 때 실행
if (column === generateColumn && range.getValue() === true) {
createCalendarEvent(row);
}
}
function createCalendarEvent(row) {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
const subject = sheet.getRange(row, 1).getValue();
const professor = sheet.getRange(row, 2).getValue();
const professorEmail = sheet.getRange(row, 3).getValue();
const phoneNumber = sheet.getRange(row, 4).getValue();
const friends = [
sheet.getRange(row, 5).getValue(),
sheet.getRange(row, 6).getValue(),
sheet.getRange(row, 7).getValue(),
sheet.getRange(row, 8).getValue()
].filter(friend => friend); // 빈 칸 제외
const startTime = new Date(sheet.getRange(row, 9).getValue());
const endTime = new Date(sheet.getRange(row, 10).getValue());
const location = sheet.getRange(row, 11).getValue();
// Google Calendar 이벤트 생성
const calendar = CalendarApp.getCalendarById(CALENDAR_ID);
const event = calendar.createEvent(
subject,
startTime,
endTime,
{
location: location,
description: `교수님: ${professor} (${professorEmail})\n본인 연락처: ${phoneNumber}\n함께 듣는 친구: ${friends.join(', ')}`
}
);
// Google Calendar 이벤트 링크 가져오기
const eventUrl = event.getId();
sheet.getRange(row, 13).setValue(`https://calendar.google.com/calendar/r/eventedit/${eventUrl}`); // M열에 링크 저장
// Slack 알림 전송
sendSlackNotification(subject, startTime, endTime, location, eventUrl);
}
function sendSlackNotification(subject, startTime, endTime, location, eventUrl) {
const message = {
text: `📢 *새로운 수업 일정이 생성되었습니다!* 🎉\n\n📚 *과목:* ${subject}\n📅 *시간:* ${startTime.toLocaleString()} ~ ${endTime.toLocaleString()}\n📍 *장소:* ${location}\n🔗 *일정 확인:* <${eventUrl}|여기 클릭>`
};
const options = {
method: "post",
contentType: "application/json",
payload: JSON.stringify(message)
};
UrlFetchApp.fetch(SLACK_WEBHOOK_URL, options);
}
-
**Apps Script 편집기에서 왼쪽 시계 아이콘(트리거)**을 클릭
-
"트리거 추가" 버튼 클릭
-
다음과 같이 설정:
- 함수 선택:
onEdit
- 이벤트 소스: 스프레드시트
- 이벤트 유형: 수정 시
- 함수 선택:
-
저장 후 트리거 활성화
Google Sheets에 다음과 같은 테스트 데이터를 입력합니다:
교과목 | 교수님 | 교수님 이메일 | 본인 휴대폰 | 친구1 | 친구2 | 친구3 | 친구4 | 시작 시간 | 종료 시간 | 강의실 | 일정 생성 |
---|---|---|---|---|---|---|---|---|---|---|---|
컴퓨터공학 | 이승기 | [email protected] | 010-1234-5678 | 김철수 ([email protected]) | 박영희 ([email protected]) | 2025-03-01 09:00 | 2025-03-01 11:00 | 101호 | ✅ |
L열(일정 생성)
체크박스를 클릭합니다.- 자동으로 Google Calendar에 이벤트가 생성되고, Slack에 알림이 전송됩니다.
- Google Sheets의
M열
에 생성된 일정 링크가 자동 입력됩니다.
- Google Sheets에서 체크박스를 클릭하면 Google Calendar에 자동으로 일정이 추가됨
- 생성된 일정의 Google Calendar 링크가 자동 입력됨
- Slack으로 일정 생성 알림이 자동 전송됨
Slack 메시지를 더 강조하고 싶다면, 다음과 같이 이모지와 강조 태그를 추가할 수 있습니다:
function sendSlackNotification(subject, startTime, endTime, location, eventUrl) {
const message = {
text: `📢 *새로운 수업 일정이 생성되었습니다!* 🎉\n\n📚 *과목:* ${subject}\n📅 *시간:* ${startTime.toLocaleString()} ~ ${endTime.toLocaleString()}\n📍 *장소:* ${location}\n🔗 *[일정 확인하기](<${eventUrl}>)`
};
const options = {
method: "post",
contentType: "application/json",
payload: JSON.stringify(message)
};
UrlFetchApp.fetch(SLACK_WEBHOOK_URL, options);
}
이제 Google Sheets 데이터를 기반으로 Google Calendar에 자동으로 일정이 추가되는 시스템이 완성되었습니다!
추가적으로 이메일 알림 기능을 추가하거나, Google Meet 링크를 자동 생성하는 기능도 확장할 수 있습니다.