-
구글 캘린더-구글 시트 자동화(오류'가져온 일정을 다시 가져올 때')AppsScript 2023. 12. 8. 22:20
매번 트리거가 실행될 때마다 기존에 가져온 일정도 중복으로 가져오는 문제를 해결하기 위해서는 스크립트를 조금 수정해야 합니다. 기본적으로, 스크립트는 캘린더의 모든 이벤트를 가져와서 구글 시트에 추가하는 방식으로 작성되어 있는데, 중복을 피하기 위해 몇 가지 수정을 할 수 있습니다:
- 이미 가져온 이벤트 식별: 스크립트에 로직을 추가하여 이미 가져온 이벤트를 식별하고, 그러한 이벤트는 건너뛰도록 할 수 있습니다. 예를 들어, 이벤트의 ID나 제목과 시간을 조합하여 고유한 식별자를 만들고, 이를 이용해 중복을 확인할 수 있습니다.
- 구글 시트에 기록된 이벤트 확인: 스크립트가 실행될 때마다 구글 시트에 이미 기록된 이벤트를 확인하고, 이를 새로 가져오는 이벤트와 비교합니다. 이를 위해 스프레드시트에서 특정 열(예: 이벤트 ID 또는 제목과 시간의 조합)을 검색하여 이벤트가 이미 존재하는지 여부를 확인할 수 있습니다.
- 중복 제거 로직 추가: 스크립트에 중복을 확인하고 제거하는 로직을 추가합니다. 예를 들어, 새로 가져온 이벤트의 고유 식별자가 이미 시트에 존재하는 경우, 그 이벤트는 시트에 추가하지 않습니다.
수정 코드
function importCalendarEvents() { var sheet = SpreadsheetApp.getActiveSheet(); var calendar = CalendarApp.getDefaultCalendar(); var now = new Date(); var events = calendar.getEventsForDay(now); var existingEvents = sheet.getDataRange().getValues(); for (var i = 0; i < events.length; i++) { var event = events[i]; var eventId = event.getId(); var isDuplicate = false; // 기존 이벤트와 비교하여 중복 확인 for (var j = 0; j < existingEvents.length; j++) { if (existingEvents[j].indexOf(eventId) > -1) { isDuplicate = true; break; } } // 중복되지 않은 경우에만 시트에 추가 if (!isDuplicate) { sheet.appendRow([event.getTitle(), event.getStartTime(), event.getEndTime(), event.getDescription(), eventId]); } } }
이 코드는 각 이벤트의 ID를 사용하여 중복을 확인하고, 중복되지 않은 이벤트만 구글 시트에 추가합니다. 이벤트 ID는 각 Google 캘린더 이벤트가 고유하게 가지고 있는 식별자입니다. 이 방식을 통해 중복된 데이터의 기록을 방지할 수 있습니다.