Excel to JSON 변환 도구
Excel 파일을 업로드하여 스프레드시트 데이터를 JSON 형식으로 변환
Excel 파일을 여기에 드래그 앤 드롭하거나 클릭하여 선택
Excel to JSON이란?
Excel to JSON은 Microsoft Excel(.xlsx/.xls) 스프레드시트 데이터를 JSON(JavaScript Object Notation) 형식으로 변환하는 온라인 데이터 변환 도구입니다.
Excel은 세계에서 가장 인기 있는 스프레드시트 소프트웨어로, 데이터 저장, 분석 및 보고서 작성에 널리 사용됩니다. JSON은 현대 웹 애플리케이션과 API에서 가장 일반적으로 사용되는 데이터 교환 형식으로, 명확한 구조와 쉬운 파싱이 특징입니다.
이 도구를 사용하면 Excel 스프레드시트 데이터를 JSON 배열로 빠르게 변환하여 프로그래밍, 데이터 분석 및 웹 개발에 편리하게 사용할 수 있습니다. 모든 처리는 브라우저에서 로컬로 이루어져 데이터 보안이 보장됩니다.
사용 방법
사용 방법
- 업로드 영역을 클릭하거나 Excel 파일을 드래그 앤 드롭하세요(.xlsx 및 .xls 형식 지원)
- 시트가 여러 개인 경우 드롭다운 메뉴에서 변환할 시트를 선택하세요
- 첫 번째 행을 JSON 객체 필드명으로 사용할지 선택하세요
- 포맷된 JSON 데이터가 자동으로 생성되어 즉시 복사할 수 있습니다
스프레드시트 참고사항
- JSON을 사용하기 전에 선택한 시트, 헤더 행, 병합된 셀, 빈 행, 날짜 형식을 확인하세요.
- 스프레드시트는 표시 형식과 원시 값이 섞여 있는 경우가 많으므로, 변환 후 숫자와 날짜를 반드시 확인하세요.
활용 사례
기술 원리
최신 .xlsx 워크북은 ECMA-376 / ISO/IEC 29500(Office Open XML 표준)으로 정의된 SpreadsheetML 파일이다. .xlsx 확장자는 ZIP 컨테이너이며, 내부에는 xl/worksheets/sheetN.xml 경로의 XML 문서가 들어 있고, 문자열은 xl/sharedStrings.xml의 공유 문자열 테이블에 저장되며, 셀 타입은 t 속성으로 선언된다(s = 공유 문자열, n = 숫자, b = 불리언, str = 인라인 문자열, d = ISO 8601 날짜). 페이지는 FileReader.readAsArrayBuffer로 업로드된 File을 읽은 뒤 ArrayBuffer를 SheetJS(xlsx)에 전달한다. XLSX.read(buffer, {type: 'array'})는 SheetNames 배열이 시트 선택기를 구동하는 워크북 객체를 반환하며, XLSX.utils.sheet_to_json(sheet, options)는 셀 그리드를 순회하여 헤더 행을 키로 사용하는 객체 배열 또는 header: 1을 전달하면 배열의 배열을 생성한다. 레거시 .xls는 바이너리 BIFF8 형식(Excel 97-2003)으로, SheetJS는 동일한 read() 진입점에서 type: 'binary'(FileReader.readAsBinaryString용) 또는 바이트 단위 읽기 시 'array'로 디코딩한다. 두 형식 모두에서 날짜 셀 값은 일련 번호로 저장된다(Excel에서는 1900년 기준 일수이며, 1900-02-29 윤년 버그로 인해 1900-03-01 이전 날짜가 하루 밀리고, Mac용 Excel에서 date1904 플래그가 설정되면 1904-01-01 기준 일수). JavaScript Date로의 변환은 윤년 버그를 보정한 뒤 1900 시스템의 경우 (serial - 25569) × 86400 × 1000ms를 Unix 에포크 이후 밀리초로 계산한다. 수식은 f 속성에 저장되며, SheetJS는 마지막 캐시된 결과를 v에 보고한다. 재계산 없이 저장한 도구(예: 스크립트 내보내기)의 경우 v가 누락되었거나 오래된 값일 수 있다. 첫 번째 행을 헤더로 사용할 때, 중복되거나 빈 헤더 셀은 SheetJS가 키를 건너뛰거나 자동 이름 변경(__EMPTY, __EMPTY_1 등)하게 하여 다운스트림 JSON 계약을 깨뜨린다. 병합 셀 범위(worksheets/mergeCells에 선언)는 좌상단 앵커에만 값을 노출하고 병합된 꼬리 셀에는 undefined를 출력하므로, 병합된 제목 행은 값이 채워진 레코드 하나와 N-1개의 희소 레코드를 생성한다. 수십 메가바이트 이상의 워크북의 경우 동기식 XLSX.read() 경로가 UI 스레드를 블로킹할 수 있으므로, 파싱을 Web Worker로 옮겨 메인 스레드가 응답을 유지하도록 하는 것이 스트리밍 대안이다.
- .xlsx는 XML의 ZIP 컨테이너(ECMA-376 / ISO/IEC 29500)이고, .xls는 바이너리 BIFF8 형식이다. SheetJS XLSX.read(buffer, {type: 'array'})는 FileReader.readAsArrayBuffer를 통해 둘 다 처리한다.
- sheet_to_json 옵션: header: 1은 배열의 배열 반환, header: 'A'는 스프레드시트 열 문자 사용, defval: null은 희소 셀을 null로 채움(키 삭제 대신), raw: false는 Excel 표시 형식을 적용한다.
- Excel 날짜 일련 번호는 1900-01-01 기준 일수(1900-02-29 윤년 버그 포함; Mac 1904 날짜 시스템은 1904-01-01 기준). JS Date ms = (serial - 25569) × 86400000(Unix 에포크 이후).
- 중복되거나 빈 헤더 셀은 자동 이름 변경 키(__EMPTY, __EMPTY_1)가 되거나 조용히 충돌한다. 스키마에 의존하기 전에 해당 문자열로 JSON을 검증해야 한다.
- 병합 셀 범위(worksheets.mergeCells)는 좌상단 앵커에만 값을 노출한다. 병합의 꼬리 셀은 undefined이므로, 병합된 제목 행은 값이 있는 레코드 하나와 빈 필드가 있는 N-1개의 레코드를 생성한다.
- 수식 셀은 f에 표현식을, v에 마지막 캐시된 결과를 저장한다. 재계산 없이 저장하는 도구는 v를 오래되거나 누락된 상태로 남기며, SheetJS는 v를 있는 그대로 반환한다.
- ~10MB 이상의 워크북에 대해 XLSX.read를 Web Worker로 옮긴다. 동기식 파싱 경로는 requestAnimationFrame을 블로킹하여 대형 시트에서 수 초간 탭을 멈출 수 있다.
예시
직원 시트를 JSON 객체 배열로 변환
Excel 행 (Staff 시트):
id | name | dept | salary
1 | Alice | Engineering| 8500
2 | Bob | Sales | 6200
JSON 출력:
[
{ "id": 1, "name": "Alice", "dept": "Engineering", "salary": 8500 },
{ "id": 2, "name": "Bob", "dept": "Sales", "salary": 6200 }
]다중 시트 워크북 (orders.xlsx)
워크북 시트: ["Customers", "Orders", "Products"]
선택한 시트: Orders
첫 행을 헤더로 사용: order_id, customer_id, total, date
결과: 1,284개 행이 JSON 객체로 변환됨
뒤쪽 빈 셀은 빈 문자열이 아닌 null로 처리됨Excel 날짜 셀을 ISO 8601 문자열로
셀 A2 (Excel에서 날짜로 서식 지정): 46173 (Excel 일련번호)
Excel에 표시됨: 2026-06-01
JSON 출력:
{ "order_date": "2026-06-01T00:00:00.000Z" }
참고: Excel은 날짜를 숫자 일련번호로 저장하며, 이 도구는 이를 ISO 문자열로 정규화합니다공백과 한자가 포함된 헤더
헤더 행: "Order No." | "客户姓名" | "金额 (USD)"
JSON 키는 그대로 보존됩니다:
{
"Order No.": "A-1024",
"客户姓名": "王小明",
"金额 (USD)": 199.50
}자주 묻는 질문
Excel 파일이 업로드되나요?
아니요. .xlsx, .xls, .csv 파일은 SheetJS를 사용해 브라우저에서 파싱됩니다. 파일 데이터는 기기를 절대 떠나지 않습니다. 파일을 로드하면서 네트워크 탭을 확인해 직접 검증할 수 있습니다.
변환 후에도 어떤 Excel 기능이 유지되나요?
셀 값, 날짜(옵션에 따라 ISO 문자열 또는 Excel 시리얼 번호), 숫자, 불리언, 텍스트가 유지됩니다. 차트, 이미지, 조건부 서식, 수식(수식이 아닌 캐시된 값이 유지됨), 메모, 병합된 셀은 삭제되거나 단순화됩니다.
모든 시트가 변환되나요?
선택한 시트만 변환됩니다. 시트 드롭다운에서 내보낼 시트를 선택하세요. 여러 시트가 필요하다면 한 번에 하나씩 변환해야 합니다.
헤더와 행은 어떻게 JSON으로 매핑되나요?
'첫 행을 헤더로 사용' 옵션이 켜져 있으면 결과는 헤더 셀을 키로 사용하는 객체 배열이 됩니다. 꺼져 있으면 셀 값들의 배열의 배열이 됩니다. 빈 셀은 출력에서 null로 변환됩니다.
날짜는 어떻게 처리되나요?
Excel은 날짜를 시리얼 번호(1900년 이후의 일수)로 저장합니다. 본 페이지는 기본적으로 이를 ISO 8601 문자열(2026-06-13)로 변환합니다. 'raw'로 전환하면 시리얼 번호가 유지되며, 나중에 Excel로 다시 가져올 때 유용합니다. 시간만 있는 셀은 'T14:30:00' 같은 문자열이 됩니다.
수식은 어떻게 되나요?
수식은 평가되지 않으며, Excel이 마지막으로 저장한 캐시된 계산값만 사용됩니다. 최신 수식 결과가 필요하다면 Excel에서 파일을 열어 다시 계산(F9)한 뒤 저장하고 다시 업로드하세요.
파일 크기 제한이 있나요?
브라우저 메모리에 의해 제한됩니다. 최신 데스크톱은 수백 MB까지의 워크북을 처리할 수 있습니다. 매우 큰 파일(100만 행 초과)의 경우 브라우저 메모리가 부족해질 수 있으니 데스크톱 스크립팅 도구(Python pandas, Excel Power Query)를 사용하세요.