앱스 스크립트 사용법 (7) 구글 캘린더에서 일정 수집하기

이번에는 구글 앱스 스크립트를 사용하여 구글 캘린더에 접근하여 일정 정보를 수집하는 스크립트를 만들어보겠습니다.

개요

  1. 구글 캘린더에 접근하여 실행 당일~7일 후의 일정을 수집한다.
  2. 수집한 일정을 목록으로 만든다.
  3. 만든 일정 목록을 메일로 보낸다.

저는 이 스크립트를 매주 월요일 아침에 실행하도록 설정하여 월요일에 그 주의 일정을 확인하는데 사용하고 있습니다.

구글 캘린더에 접근하기 위해 참고한 페이지:

앱스 스크립트를 작성

https://script.google.com/home 에 접속하여 [새 프로젝트]버튼을 클릭합니다.getCalendar01

스크립트 편집 화면에 들어옵니다.getCalendar02

스크립트 편집 화면에 아래 코드를 넣습니다.

function getCalendar_sendMail() {

var weekdays = ['일요일', '월요일', '화요일', '수요일','목요일','금요일','토요일'];

// 현재 날짜, 7일후 날짜 구하기 
var now = new Date();
var day7after = new Date();
day7after.setDate(now.getDate() + 7);
var events = CalendarApp.getDefaultCalendar().getEvents(now, day7after);

// 일정이 하나도 없는 경우, 스크립트를 종료함.
if(events.length == 0) return;

// 메일 내용
var mailbody = "<h2>이번 주 일정</h2>";

for(var cei = 0; cei < events.length; cei++){
var ceTitle = events[cei].getTitle();
var ceStart = events[cei].getStartTime();
var ceEnd = events[cei].getEndTime();
var ceCompare = new Date();
ceCompare.setDate(ceStart.getDate() + 1);
var ceWeekday = ceStart.getDay();

var ceEvent = "<ul> <li> " + weekdays[ceWeekday] + "</li> <ul>";
if(events[cei].isAllDayEvent() == true){

if(ceCompare < ceEnd){
ceEvent = ceEvent 
+ " <li> [날짜] " + Utilities.formatDate(ceStart, 'Asia/Seoul', "MM/dd (E)") 
+ " ~ " + Utilities.formatDate(ceEnd, 'Asia/Seoul', "MM/dd (E)")+ "</li>"
+ " <li> [일정] " + ceTitle + "</li> </ul> </ul> ";
}else{
ceEvent = ceEvent 
+ " <li> [날짜] " + Utilities.formatDate(ceStart, 'Asia/Seoul', "MM/dd (E)") + "</li>"
+ " <li> [일정] " + ceTitle + "</li> </ul> </ul> ";
}

}else{
if(ceStart.getDay() == ceEnd.getDay()){
ceEvent = ceEvent 
+ " <li> [날짜] " + Utilities.formatDate(ceStart, 'Asia/Seoul', "MM/dd (E) HH:mm")
+ " ~ " + Utilities.formatDate(ceEnd, 'Asia/Seoul', "HH:mm")+ "</li>"
+ " <li> [일정] " + ceTitle+ "</li> </ul> </ul> ";
}else{
ceEvent = ceEvent 
+ " <li> [날짜] " + Utilities.formatDate(ceStart, 'Asia/Seoul', "MM/dd (E) HH:mm")
+ " ~ " + Utilities.formatDate(ceEnd, 'Asia/Seoul', "MM/dd (E) HH:mm")+ "</li>"
+ " <li> [일정] " + ceTitle+ "</li> </ul> </ul> ";
}

}

mailbody = mailbody + ceEvent + "<br>"
}

// 메일 주소
var recipient = "<일정을 받을 메일 주소>"; // 메일 주소를 넣여주세요.
// 메일 제목
var subject = "이번 주 예정 알림";
// 메일 내용
var htmlbody = mailbody ;

// 메일 보내기
MailApp.sendEmail({
to: recipient,
subject: subject,
htmlBody: htmlbody, 
});
}

프로젝트를 저장합니다.

getCalendar04.png

▶(실행)버튼을 클릭합니다.getCalendar05.png

처음 실행하실 때, 권한 요청을 해옵니다. 실행을 허용해주세요.
(스크린샷은 생략합니다. 자세한 내용은 앱스 스크립트 사용법 (1) 메일 보내기 > 실행 권한 허용 을 확인해주세요.)

스크립트 실행

스크립트를 허용 후 다시 실행하면, 메일이 도착합니다.getCalendar06.png

메일 내용에서 구글 달력에 설정해둔 일정 목록을 확인할 수 있습니다.getCalendar07

아래는 테스트 전에 구글 달력에 미리 설정해둔 일정입니다.getCalendar13

트리거 설정

이제는 이 메일을 지정한 시간에 매주 받도록 설정해보겠습니다.

시계모양 아이콘으로 된 (현재 프로젝트의 트리거) 버튼을 클릭합니다.getCalendar09

[트리거 추가] 버튼을 클릭합니다.getCalendar10.png

트리거 설정화면이 뜹니다.getCalendar11

트리거에 시간 기반, 주 단위 타이머, 매주 월요일, 원하는 시간대를 설정 후 [저장]을 클릭합니다.getCalendar12

트리거 설정이 완료되었습니다.

설정한 시간에 메일이 도착하면 성공입니다!getCalendar14

아래는 테스트 전에 구글 달력에 미리 설정해둔 일정입니다.getCalendar15

 

구글 앱스 스크립트의 다른 활용법을 알고싶으시다면!
» G Suite 사용법 #5 앱스 스크립트 활용 예시 모음

8 Replies to “앱스 스크립트 사용법 (7) 구글 캘린더에서 일정 수집하기”

  1. 코딩을 배운적이 없어서 문의드립니다.
    defaultCalendar말고
    특정 켈린더에서 받으려고 수정하려는데요
    Exception: 매개변수(String)가 CalendarApp.getDefaultCalendar에 대한 메소드 서명과 일치하지 않습니다
    이렇게 나오는데 따로해야하는게있나요?

    좋아요

  2. 코딩을 배워본적이없어서 이해가 안가 문의드립니다…
    특정 캘린더내용만 불러오고싶어서
    defaultCalendar 에서 getCalendarById(id) 로 바꿧는데 아래같이 나오네요

    Exception: 매개변수(String)가 CalendarApp.getDefaultCalendar에 대한 메소드 서명과 일치하지 않습니다.(‘코드’ 파일, 9행)

    어떤걸 추가로 해야할까요..

    좋아요

  3. 제가 구글링 하다 바슷한 자료를 찾은것 같아 여쭤 볼려고 합니다.
    2021년 1월~12월 까지 월~금 에 있는 날짜를 공휴일을 제외 하고 따로 출력(시트1의 B2) 할려고 하는데 아무래도 스크립트 라는 걸 사용 해야 할것 같아 그 쪽 으로는 비전공자 이라 도움을 받고 싶어 문의 드렸어요. 실례가 안된다면 한번 살펴 봐 주실수 있을까요?
    허락없이 무턱대고 올렸어요. 미안합니다 ㅜㅜ
    https://docs.google.com/spreadsheets/d/1HPPa15a9qCfvs3QYKC1aE_hNKmXGjK25nuN6VXhYBDI/edit?usp=sharing

    좋아요

댓글 남기기