XLSX에서 JSON으로의 변환이 특별한 이유
엑셀 파일(XLSX)을 JSON으로 변환하는 과정은 CSV로 변환하는 것과 근본적으로 다릅니다. XLSX는 압축된 XML 통합 문서로, 여러 시트, 셀 유형(텍스트, 숫자, 날짜, 부울), 수식, 서식을 함께 저장합니다. 반면 JSON은 객체, 배열, 숫자, 불리언, null을 지원하는 타입 기반의 중첩 가능한 형식입니다. 이 변환 도구는 숫자와 불리언 셀 값을 따옴표 없는 타입 그대로 JSON에 보존합니다. 하지만 셀 서식, 수식(계산되지 않음), 첫 번째 시트 외의 데이터는 모두 버려집니다. CSV는 모든 행을 단순 텍스트 줄로 평탄화하지만, JSON은 열 이름을 키로 하는 객체 배열로 표 구조를 표현합니다. 다만 엑셀 표 자체는 계층 구조가 없으므로, 자동으로 중첩 JSON이 생성되지는 않습니다.
입력과 출력: 무엇을 넣고 무엇을 얻는가
입력: 단일 XLSX 파일(드래그 앤 드롭 또는 파일 선택기), 출력 형식은 반드시 JSON으로 설정. 출력: 변환된 JSON 파일(다운로드 가능), 미리보기, 변환된 표의 행과 열 개수, 출력 JSON의 파일 크기.
변환은 전적으로 브라우저에서 실행됩니다. 어떤 데이터도 서버로 업로드되지 않으므로, 민감한 엑셀 파일을 안전하게 처리할 수 있습니다.
변환 규칙과 오류 처리
- 첫 번째 시트만 읽습니다. 다른 시트의 데이터는 무시됩니다.
- 보이는 값을 사용합니다. 수식은 다시 계산되지 않으며, 수식 셀의 결과는 파일이 마지막으로 저장된 시점의 값입니다.
- 셀 스타일, 병합된 셀, 서체, 색상, 테두리 등 서식은 보존되지 않습니다.
- 파일 크기, 행 수, 열 수에 제한이 적용됩니다. 예를 들어 파일이
‹max›를 초과하면"파일이 너무 큽니다. ‹max› 미만의 파일을 사용하세요."오류가 표시됩니다. 마찬가지로 표의 행이‹max›개를 넘거나 열이‹max›개를 넘으면 해당 오류 메시지가 나타납니다. - XLSX 파일을 파싱할 수 없으면
"이 Excel 파일을 열 수 없습니다."메시지가 출력됩니다. - 첫 번째 시트에 데이터 행이 없으면
"이 파일에 테이블 행이 없습니다."오류가 발생합니다. - 그 외 오류 메시지:
"CSV, JSON 또는 XLSX 파일을 선택하세요.","이 파일을 변환할 수 없습니다.","변환이 취소되었습니다.","변환 시간이 너무 오래 걸립니다. 더 작은 파일을 시도하세요."
이런 사용자에게 적합합니다
- 엑셀 스프레드시트로 제품 데이터를 받아 API나 프런트엔드 애플리케이션에 사용할 JSON이 필요한 웹 개발자
- 분기별 보고서(XLSX)를 기계가 읽을 수 있는 JSON으로 빠르게 변환하려는 데이터 분석가
- 외부 파트너가 엑셀보다 JSON을 선호할 때, 별도 소프트웨어 설치 없이 일회성 변환이 필요한 팀
- 개인정보 보호에 민감하여 클라우드 서비스에 파일을 업로드하지 않고 로컬에서 변환하려는 모든 사용자
기술적 배경: 셀 타입 매핑과 수식 손실
셀 타입 매핑
엑셀의 각 셀 유형은 JSON에서 다음과 같이 변환됩니다.
| 엑셀 셀 유형 | JSON 값 |
|---|---|
| 숫자 (Number) | 숫자 (예: 42, 3.14) |
| 불리언 (Boolean) | true 또는 false |
| 날짜 (Date) | 일반적으로 숫자로 저장된 후 문자열로 변환됨 (형식은 엑셀의 표시 형식에 의존) |
| 텍스트 (String) | 문자열 (예: "서울") |
| 빈 셀 | null |
날짜 셀은 엑셀 내부에서 날짜 일련번호로 저장되므로, 변환 시 해당 숫자가 그대로 JSON에 포함될 수 있습니다. 원하는 날짜 형식을 얻으려면 엑셀에서 미리 텍스트로 변환하거나, 변환 후 별도 처리가 필요합니다.
수식 손실의 이유
XLSX 파일은 수식 자체를 XML로 저장하지만, 이 도구는 수식을 다시 계산하지 않습니다. 최종 사용자에게 보이는 값(마지막 저장 시점의 결과)만 읽어옵니다. 따라서 동적 계산이 필요한 경우 엑셀을 열어 수식을 값으로 대체한 후 변환하거나, 변환 후 JSON을 수동으로 보정해야 합니다.
클라이언트 측 처리의 장점
브라우저가 XLSX 파일을 JavaScript로 직접 파싱하므로, 데이터가 외부 서버로 전송되지 않습니다. 이는 개인정보 보호 측면에서 큰 이점이며, 대역폭 소모 없이 빠르게 변환할 수 있습니다. 또한 대용량 파일도 사용자 환경의 성능에만 의존합니다.
자주 묻는 질문 (FAQ)
Q: 변환 결과에 병합된 셀의 모든 값이 포함되나요?
A: 아닙니다. 병합된 셀은 첫 번째 셀의 값만 유지되며, 나머지 병합 영역은 빈 셀로 간주되어 null이 됩니다.
Q: 두 번째 시트의 데이터는 어떻게 변환하나요? A: 이 도구는 첫 번째 시트만 처리합니다. 다른 시트를 변환하려면 먼저 엑셀에서 해당 시트를 새 파일로 저장한 후 다시 업로드하세요.
Q: JSON 파일이 너무 크다고 오류가 나면 어떻게 하나요?
A: 파일 크기 제한 ‹max›을 초과했기 때문입니다. 엑셀 파일에서 불필요한 행이나 열을 삭제하거나, 시트를 분할하여 변환하세요.
Q: 변환 시간이 너무 오래 걸리면 어떻게 하나요?
A: "변환 시간이 너무 오래 걸립니다. 더 작은 파일을 시도하세요." 메시지가 나타납니다. 파일 크기를 줄이거나, 행과 열 개수를 확인하세요.
Q: 수식 결과 대신 수식 자체가 JSON에 저장되나요? A: 아닙니다. 수식은 저장되지 않으며, 수식 셀의 마지막 저장된 결과값이 숫자나 문자열로 변환됩니다.
Q: 이 도구를 사용해도 데이터가 서버에 저장되지 않는다는 것을 어떻게 확신하나요? A: 변환 과정은 순수하게 브라우저의 JavaScript 엔진에서 실행됩니다. 네트워크 요청이 전혀 발생하지 않으며, 파일 업로드나 데이터 전송이 일어나지 않습니다. 개발자 도구의 네트워크 탭에서 확인할 수 있습니다.