Skip to content

Latest commit

 

History

History
170 lines (134 loc) · 6.7 KB

4.sheetsToCalendar.md

File metadata and controls

170 lines (134 loc) · 6.7 KB

실습 4: 스프레드시트에서 새내기 시간표 생성하기

이 실습에서는 Google Sheets에서 특정 칼럼이 체크되면 Google Calendar에 자동으로 수업 일정을 추가하는 시스템을 구축합니다.
또한, 추가 실습으로 이벤트 생성 시 Slack으로 안내 메시지를 발송하는 기능도 구현합니다.


1. Google Sheets 설정

📌 1-1. 스프레드시트 생성

  1. Google Sheets에서 새로운 스프레드시트를 생성합니다.
  2. 첫 번째 행에 다음 헤더를 추가합니다:
    • 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열: 일정 생성 (체크박스 추가)

📌 1-2. 체크박스 추가

  1. **L열(일정 생성)**을 선택합니다.
  2. 상단 메뉴 → 삽입 → 체크박스를 클릭하여 체크박스 추가

2. Google Apps Script 작성

📌 2-1. Apps Script 편집기 열기

  1. 스프레드시트 상단 메뉴에서 확장 프로그램 → Apps Script를 클릭합니다.

📌 2-2. Google Calendar 일정 추가 스크립트 작성

아래 스크립트를 복사하여 입력합니다:

// 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);
}

3. 트리거 설정

📌 3-1. 트리거 추가하기

  1. **Apps Script 편집기에서 왼쪽 시계 아이콘(트리거)**을 클릭

  2. "트리거 추가" 버튼 클릭

  3. 다음과 같이 설정:

    • 함수 선택: onEdit
    • 이벤트 소스: 스프레드시트
    • 이벤트 유형: 수정 시
  4. 저장 후 트리거 활성화


4. 테스트 실행

📌 4-1. 테스트 데이터 입력

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호

📌 4-2. 체크박스 클릭

  1. L열(일정 생성) 체크박스를 클릭합니다.
  2. 자동으로 Google Calendar에 이벤트가 생성되고, Slack에 알림이 전송됩니다.
  3. Google Sheets의 M열생성된 일정 링크가 자동 입력됩니다.

✅ 실습 결과

  • Google Sheets에서 체크박스를 클릭하면 Google Calendar에 자동으로 일정이 추가됨
  • 생성된 일정의 Google Calendar 링크가 자동 입력됨
  • Slack으로 일정 생성 알림이 자동 전송됨

📌 추가 실습: 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 링크를 자동 생성하는 기능도 확장할 수 있습니다.