MYMONDAY.ai
서비스스튜디오도구데이터·포맷73CSS 생성기19색상·이미지10인코딩·보안10웹·SEO11개발·데브옵스10파일·내보내기18계산기6가이드

ICS CSV 변환기

iCalendar 내보내기를 일정마다 한 행씩, 엑셀이나 구글 시트에서 안전하게 열 수 있는 CSV로 바꿉니다.

  • 브라우저에서 처리
  • 가입 없음
  • 무료

도구 작업 공간

예제

iCalendar(.ics) 텍스트

30줄592byte
events.csv
UID,Summary,Start,End,All day,Timezone,Location,Description,Recurrence,Status,EXDATE,RDATE,Recurrence ID

design-review@example.com,Design review,2027-03-01T14:00:00,2027-03-01T15:30:00,false,Asia/Seoul,"Room 4, floor 2",,,,,,

class@example.com,Weekly class,2027-03-02T09:00:00Z,2027-03-02T10:00:00Z,false,UTC,,,FREQ=WEEKLY;COUNT=3,,,,

내려받는 파일에만 BOM을 붙여 엑셀에서 한글 등 non-ASCII 글자가 깨지지 않게 합니다. 복사한 텍스트에는 영향이 없습니다.

일정2
열13
크기338byte

한 행에 일정 하나를 담으며 Start(시작)와 End(종료)는 iCalendar의 20270301T090000 대신 하이픈이 있는 ISO 날짜·시각(2027-03-01T09:00:00, 종일은 2027-03-02)을 쓰고, 종일 End는 마지막 날을 포함해 CSV → ICS 도구에서 다시 읽을 수 있습니다. Recurrence(반복)는 원래 RRULE을 유지하고 EXDATE는 제외 날짜, RDATE는 추가 날짜, Recurrence ID는 변경된 단일 일정을 나타내며 스프레드시트가 수식으로 실행할 텍스트에는 앞에 작은따옴표를 붙입니다.

일정

UID제목시작종료종일시간대장소설명반복상태제외 날짜(EXDATE)추가 날짜(RDATE)변경된 일정의 원래 날짜(RECURRENCE-ID)
design-review@example.comDesign review2027-03-01T14:00:002027-03-01T15:30:00falseAsia/SeoulRoom 4, floor 2
class@example.comWeekly class2027-03-02T09:00:00Z2027-03-02T10:00:00ZfalseUTCFREQ=WEEKLY;COUNT=3

이 ICS CSV 변환기는 iCalendar(.ics) 파일을 읽어 VEVENT마다 한 행인 CSV를 씁니다. 열은 UID, Summary, Start, End, All day, Timezone, Location, Description, Recurrence, Status, EXDATE, RDATE, Recurrence ID 열세 가지입니다. 캘린더 내보내기를 점검하거나, 회의 수를 세거나, 엑셀이나 구글 시트에서 일정을 필터링하거나, 일정 데이터를 다른 시스템으로 옮기려는 사람에게 알맞습니다.

날짜는 하나의 시간대로 뭉개지지 않고 iCalendar의 의미를 유지합니다. TZID가 있는 시각은 현지 시각과 시간대 이름을 보여 주고, UTC 시각은 Z로 끝나며, 종일 일정은 날짜만 보입니다. 반복 일정은 모든 회차로 펼쳐지지 않고 RRULE과 함께 한 행으로 남습니다. 스프레드시트가 수식으로 실행할 수 있는 텍스트에는 앞에 작은따옴표를 붙여서, 제목이 =SUM(A1:A9)인 일정이 있어도 파일을 열 때 실행되지 않습니다.

입력한 내용은 브라우저 안에서 처리되며 서버로 전송되지 않습니다. 캘린더는 이 탭 안에서 ical.js 라이브러리로 파싱되고, 텍스트가 바뀌면 CSV와 일정 표가 바로 갱신됩니다. 한도는 입력 5 MiB, 일정 50,000개, CSV 20 MiB입니다.

사용 방법

  1. .ics로 캘린더 내보내기

    캘린더 앱에서 .ics 내보내기를 받거나 그 텍스트를 복사합니다. 변환기는 캘린더 URL을 가져오지 않습니다.

  2. 파일 열기 또는 붙여 넣기

    파일 열기를 누르거나 .ics 파일을 편집기에 끌어다 놓거나 내용을 붙여 넣습니다. 처음에는 올바른 캘린더 예제가 들어 있습니다. 빈 입력, 5 MiB를 넘는 파일, 해석할 수 없는 파일, 일정이 없는 파일은 각각 편집기 아래에 따로 메시지가 나옵니다.

  3. 결과 확인

    events.csv 보기에 CSV가 바로 나타나고 일정, 열, 크기 숫자가 함께 표시됩니다. 그 아래 일정 표는 제목, 시작, 종료처럼 읽기 쉬운 열 이름으로 처음 100개 일정을 보여 주므로 저장하기 전에 제목과 시각을 훑어볼 수 있습니다.

  4. CSV 복사 또는 다운로드

    CSV를 클립보드로 복사하거나 events.csv로 내려받습니다. 표에는 처음 100개만 보여도 파일에는 모든 일정이 들어갑니다.

  5. 스프레드시트에서 열기

    엑셀이나 구글 시트에서 CSV를 엽니다. 내려받은 파일에는 기본으로 BOM이 붙어 엑셀에서 한글 등이 올바르게 보입니다. "엑셀 호환 (UTF-8 BOM)"을 껐거나 복사한 텍스트를 직접 파일로 저장해서 깨져 보이면 파일을 더블클릭하지 말고 데이터 탭에서 UTF-8 텍스트로 가져오세요.

작동 원리

열세 가지 열

VEVENT마다 한 행이 됩니다. 텍스트 값은 이스케이프가 풀려서 iCalendar의 Room 4\, floor 2는 Room 4, floor 2로, \n으로 쓴 줄바꿈은 따옴표 CSV 셀 안의 실제 줄바꿈으로 나옵니다. 쉼표, 따옴표, 줄바꿈이 든 셀은 따옴표로 감싸고, 파일은 CRLF 줄바꿈을 씁니다. 내려받는 파일은 엑셀이 올바르게 읽도록 UTF-8 BOM으로 시작하며, "엑셀 호환 (UTF-8 BOM)" 스위치는 기본으로 켜져 있고 다운로드에만 적용되어 복사한 텍스트는 바뀌지 않습니다.

열출처비고
UIDUID일정에 없으면 비어 있음
SummarySUMMARY일정 제목
StartDTSTART2027-03-01T09:00:00, UTC는 Z가 붙고 종일은 2027-03-02
EndDTEND 또는 DTSTART + DURATIONDURATION이 있으면 계산하고 둘 다 없을 때만 비어 있음
All dayDTSTART의 값 유형DTSTART가 DATE 값이면 true
TimezoneTZID 매개변수Z 시각은 UTC, 부유 시각과 종일 날짜는 비어 있음
LocationLOCATION
DescriptionDESCRIPTION줄바꿈이 포함될 수 있음
RecurrenceRRULEFREQ=WEEKLY;COUNT=2 같은 규칙 원문
StatusSTATUS있으면 TENTATIVE, CONFIRMED, CANCELLED
EXDATEEXDATE제외할 반복 날짜. 여러 값은 세미콜론으로 연결
RDATERDATE추가할 반복 날짜. 여러 값은 세미콜론으로 연결
Recurrence IDRECURRENCE-ID이 변경 일정이 가리키는 원래 반복 시점

iCalendar의 시작과 종료 (RFC 5545)

DATE-TIME 값은 파일에서 구분 기호 없이(20270301T090000) 쓰이고 CSV에서는 ISO 형태(2027-03-01T09:00:00)로 보입니다. 끝의 Z는 UTC를 뜻하고 TZID 매개변수는 현지 시각의 시간대를 지정합니다. 둘 다 없는 시각은 보는 사람의 시간대를 따르는 부유 시각이며 Timezone 셀이 비어 있습니다.

종일 일정은 DATE 값을 쓰고 종료는 포함되지 않는 날짜입니다. 3월 2일 하루짜리 일정의 DTEND는 3월 3일입니다. CSV는 종일 DTEND에서 하루를 뺀 마지막 포함 날짜를 보여 주므로 CSV ICS 변환기로 되돌려도 하루가 늘지 않습니다. 반복 일정은 RRULE이 Recurrence에 든 한 행이고, EXDATE는 제외 날짜, RDATE는 추가 날짜, Recurrence ID는 수정한 한 회차를 나타냅니다.

스프레드시트 수식 방지

엑셀, 리브레오피스, 구글 시트는 =, +, -, @로 시작하는 셀을 수식으로 처리합니다. CSV 인젝션이 바로 이 점을 노려서, 제목에 수식을 넣은 초대장이 내보내기 파일을 연 사람의 컴퓨터에서 그 수식을 실행하게 만들 수 있습니다. 변환기는 그런 텍스트 앞에 작은따옴표를 붙이고, 스프레드시트는 이를 일반 텍스트로 표시하면서 따옴표는 셀에서 숨깁니다.

실제 데이터가 망가지지 않도록 규칙은 좁게 잡혀 있습니다. =, @, 탭, 캐리지 리턴으로 시작하는 값에는 항상 작은따옴표가 붙습니다. +나 -로 시작하는 값은 나머지가 숫자, 공백, 점, 하이픈, 괄호로만 된 숫자 모양이 아닐 때만 붙으므로 +82 10-1234-5678 같은 전화번호나 -12.5 같은 금액은 그대로입니다. 페이지의 일정 표는 원래 값을 보여 주고, 작은따옴표는 CSV 텍스트에만 들어갑니다.

캘린더의 값CSV 셀
=SUM(A1:A9)'=SUM(A1:A9)
@channel bring laptops'@channel bring laptops
+ call Kim'+ call Kim
-5 minutes early'-5 minutes early
+82 10-1234-5678+82 10-1234-5678
-12.5-12.5

실제 예시

세 가지 종류의 일정
입력
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//t//EN
BEGIN:VEVENT
UID:one@example.test
DTSTAMP:20270101T000000Z
DTSTART;TZID=Asia/Seoul:20270301T090000
DTEND;TZID=Asia/Seoul:20270301T100000
SUMMARY:One\, meeting
LOCATION:Room A
DESCRIPTION:Line 1\nLine "2"
RRULE:FREQ=WEEKLY;COUNT=2
STATUS:CONFIRMED
END:VEVENT
BEGIN:VEVENT
UID:two@example.test
DTSTAMP:20270101T000000Z
DTSTART;VALUE=DATE:20270302
DTEND;VALUE=DATE:20270303
SUMMARY:All day
END:VEVENT
BEGIN:VEVENT
UID:three@example.test
DTSTAMP:20270101T000000Z
DTSTART:20270305T090000Z
DTEND:20270305T100000Z
SUMMARY:Utc
END:VEVENT
END:VCALENDAR
출력
UID,Summary,Start,End,All day,Timezone,Location,Description,Recurrence,Status,EXDATE,RDATE,Recurrence ID
one@example.test,"One, meeting",2027-03-01T09:00:00,2027-03-01T10:00:00,false,Asia/Seoul,Room A,"Line 1
Line ""2""",FREQ=WEEKLY;COUNT=2,CONFIRMED,,,
two@example.test,All day,2027-03-02,2027-03-02,true,,,,,,,,
three@example.test,Utc,2027-03-05T09:00:00Z,2027-03-05T10:00:00Z,false,UTC,,,,,,,

제목의 쉼표와 설명의 따옴표는 이스케이프가 풀린 뒤 CSV용으로 다시 따옴표 처리되었습니다. 주간 일정은 한 행으로 남고, 종일 일정의 Timezone은 비어 있습니다.

접힌 줄과 종료 없음
입력
BEGIN:VCALENDAR
VERSION:2.0
BEGIN:VEVENT
UID:z
DTSTART:20270306T090000Z
SUMMARY:Long ti
	tle here
END:VEVENT
END:VCALENDAR
출력
UID,Summary,Start,End,All day,Timezone,Location,Description,Recurrence,Status,EXDATE,RDATE,Recurrence ID
z,Long title here,2027-03-06T09:00:00Z,,false,UTC,,,,,,,

제목이 파일에서 두 줄로 접혀 있었고(둘째 줄은 탭으로 시작) 다시 이어졌습니다. DTEND가 없으므로 End는 비어 있습니다.

시리즈에서 옮겨진 회차
입력
BEGIN:VCALENDAR
VERSION:2.0
BEGIN:VEVENT
UID:z
RECURRENCE-ID:20270313T090000Z
DTSTART:20270313T100000Z
SUMMARY:Moved
ATTENDEE:mailto:a@b.c
END:VEVENT
END:VCALENDAR
출력
UID,Summary,Start,End,All day,Timezone,Location,Description,Recurrence,Status,EXDATE,RDATE,Recurrence ID
z,Moved,2027-03-13T10:00:00Z,,false,UTC,,,,,,,2027-03-13T09:00:00Z

RECURRENCE-ID는 Recurrence ID 열로 내보내고 ATTENDEE는 내보내지 않습니다. 나열된 열세 가지 열을 씁니다.

수식은 막고 전화번호는 그대로
입력
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//t//EN
BEGIN:VEVENT
UID:f1@example.test
DTSTAMP:20270101T000000Z
DTSTART:20270310T090000Z
SUMMARY:=SUM(A1:A9)
LOCATION:+82 10-1234-5678
DESCRIPTION:@channel bring laptops
END:VEVENT
BEGIN:VEVENT
UID:f2@example.test
DTSTAMP:20270101T000000Z
DTSTART:20270311T090000Z
SUMMARY:-5 minutes early
LOCATION:-12.5
DESCRIPTION:+ call Kim
END:VEVENT
END:VCALENDAR
출력
UID,Summary,Start,End,All day,Timezone,Location,Description,Recurrence,Status,EXDATE,RDATE,Recurrence ID
f1@example.test,'=SUM(A1:A9),2027-03-10T09:00:00Z,,false,UTC,+82 10-1234-5678,'@channel bring laptops,,,,,
f2@example.test,'-5 minutes early,2027-03-11T09:00:00Z,,false,UTC,-12.5,'+ call Kim,,,,,

수식, @ 멘션, +와 - 뒤에 글자가 오는 값에는 작은따옴표가 붙고 전화번호와 숫자 -12.5에는 붙지 않습니다. 페이지의 일정 표에는 =SUM(A1:A9)가 원래대로 보입니다.

자주 하는 실수

  • 엑셀에서 한글이 깨질 수 있음

    "엑셀 호환 (UTF-8 BOM)"이 켜져 있으면(기본값) 내려받는 CSV는 UTF-8 BOM으로 시작합니다. 복사한 텍스트나 스위치를 끄고 받은 파일에는 BOM이 없어 더블클릭하면 엑셀이 기존 코드 페이지로 열 수 있습니다. 이런 파일은 데이터 탭에서 UTF-8을 선택해 가져오거나 구글 시트에서 여세요.

  • 종일 일정의 종료일은 포함되지 않는 날짜

    하루짜리 종일 일정의 End 열은 다음 날입니다. iCalendar가 이렇게 저장하기 때문입니다. 스프레드시트에 마지막으로 포함하는 날을 보이고 싶다면 하루를 빼세요.

  • 반복 일정은 펼쳐지지 않음

    1년 동안 매주 열리는 일정은 52행이 아니라 RRULE이 있는 한 행입니다. 회차마다 한 행이 필요하면 스크립트나 캘린더 앱으로 규칙을 먼저 펼치세요.

  • 작은따옴표도 CSV 텍스트의 일부

    스프레드시트는 앞의 작은따옴표를 숨기지만 CSV를 직접 읽는 스크립트나 데이터베이스에는 문자 하나로 보입니다. 스프레드시트가 아닌 곳으로 가져온다면 Summary, Location, Description 앞의 '를 지우세요.

  • 참석자, 알림, 카테고리는 빠짐

    열 개 필드만 내보냅니다. 초대받은 사람, 알림, URL, 카테고리 같은 정보는 CSV에 없으므로 필요하면 .ics를 보관하세요.

  • 부유 시각에는 시간대가 없음

    Z도 TZID도 없는 DTSTART는 부유 시각입니다. Timezone 셀이 비어 있어 CSV만으로는 어느 시간대를 뜻했는지 알 수 없습니다.

자주 묻는 질문

구글 캘린더 내보내기를 CSV로 바꾸려면?

구글 캘린더 설정에서 캘린더를 내보내 .ics 파일을 받고, 필요하면 압축을 푼 뒤 여기서 .ics를 여세요. 일정마다 한 행이 되고, CSV는 바로 복사하거나 events.csv로 내려받을 수 있습니다.

반복 일정을 개별 날짜로 펼쳐 주나요?

아니요. 반복 일정은 한 행이고 규칙은 Recurrence 열에 FREQ=WEEKLY;COUNT=2 같은 형태로 들어갑니다.

왜 어떤 셀은 작은따옴표로 시작하나요?

텍스트가 =, @, 탭으로 시작하거나 + 또는 - 뒤에 숫자가 아닌 내용이 와서 스프레드시트가 수식으로 실행할 수 있었기 때문입니다. 작은따옴표는 셀을 일반 텍스트로 만들며 엑셀과 구글 시트에서는 보이지 않습니다.

Timezone 열에는 무엇이 나오나요?

시작 시각에 TZID가 있으면 그 값, 시각이 Z로 끝나면 UTC, 부유 시각과 종일 일정은 빈칸입니다.

일정 수에 제한이 있나요?

있습니다. 입력 5 MiB, 일정 50,000개, CSV 출력 20 MiB입니다. 페이지의 표에는 처음 100개 일정만 나오지만 CSV에는 언제나 전부 들어갑니다.

CSV를 다시 캘린더로 바꿀 수 있나요?

손실 없이 되돌리지는 못합니다. CSV ICS 변환기는 자체 컬럼 매핑으로 스프레드시트에서 캘린더를 만들고 날짜와 시간을 별도 열로 받으므로, 이 열세 가지 열 구성은 먼저 모양을 바꿔야 합니다.

캘린더가 업로드되나요?

아니요. 입력한 내용은 브라우저 안에서 처리되며 서버로 전송되지 않으므로 제목, 장소, 설명이 탭 밖으로 나가지 않습니다.

마지막 업데이트: