스프레드시트는 어떻게 JSON 이 되나?
엑셀 통합문서는 텍스트 형식이 아니다. .xlsx 는 XML 조각들을 담은 ZIP 압축 파일이라, JSON 이나 CSV 와 달리 붙여넣을 것이 없다 — 한 칸을 읽으려 해도 파일을 열어 풀어야 한다. 이 사이트에서 텍스트 상자 대신 파일을 받는 도구가 이것 하나인 이유다.
이 변환기는 통합문서를 브라우저에서 열고, 시트를 고르게 한 뒤, 그 행들을 객체 배열 JSON 이나 표, Markdown 표로 만든다. 파싱 라이브러리는 실제로 파일을 열 때만 내려받으므로 페이지를 열어 보는 것만으로는 아무 비용도 들지 않는다.
기능
- 시트를 바꿔도 다시 읽지 않는다
- 통합문서를 한 번만 파싱해 전체를 들고 있는다. 시트를 바꿀 때마다 20MB 짜리를 다시 파싱하면 그 클릭이 몇 초씩 걸린다.
- 한 번 읽어 세 가지 출력
- API 본문이나 픽스처로 쓸 JSON, 눈으로 읽을 표, README 나 PR 본문에 붙일 Markdown 표.
- 타입을 주거나, 주지 않거나
- 숫자와 불리언을 진짜 JSON 타입으로 만들거나, 받는 쪽이 알아서 파싱한다면 모든 칸을 문자열로 남긴다.
- 파일이 기기 밖으로 나가지 않는다
- 읽기와 변환이 브라우저에서 돌고 이 페이지에는 백엔드가 없다. 고객 데이터가 든 시트도 컴퓨터를 떠나지 않는다.
- 스프레드시트가 아닌 파일을 지목한다
- CSV 에 .xlsx 확장자만 붙인 경우가 가장 흔한 실패다. 뭉뚱그린 파싱 오류 대신 그 사실을 짚고 CSV 도구를 가리킨다.
사용법
- 1
파일을 연다
.xlsx 나 .xls 파일을 페이지에 끌어다 놓거나 골라서 연다. 20MB 까지 읽는다.
- 2
시트를 고른다
시트가 여럿이면 선택기가 나온다. 고르지 않으면 첫 시트를 쓴다.
- 3
헤더 줄을 확인한다
"첫 줄이 헤더" 를 켜 두어야 JSON 키가 열 이름에서 나온다.
- 4
결과를 복사한다
JSON·표·Markdown 을 오가며 필요한 것을 복사한다.
엑셀의 날짜는 숫자이고, 그중 하루는 존재하지 않는다
엑셀에서 날짜는 1899년 12월 30일부터 센 날짜 수로 저장된다. 날짜 자체가 아니다. 45292 는 2024년 1월 1일이다. 그 칸이 날짜로 보이는지는 표시 형식이 정하는데, 표시 형식은 값과 따로 산다 — 화면에서 날짜 열로 보이던 것이 정수 뭉치로 들어올 수 있고, 숫자만 봐서는 원래 의도를 되살릴 방법이 없다.
기준일이 하루 어긋난 데에는 이제 되돌릴 수 없는 이유가 있다. 엑셀은 1900년을 윤년으로 치고 1900년 2월 29일을 받아들인다. 존재한 적 없는 날이다. 로터스 1-2-3 이 먼저 가진 버그였고 엑셀이 호환을 위해 의도적으로 따라 했으며, 그 뒤로 유지되고 있다. 그 지점 이후의 모든 날짜가 하루를 더 안고 있어서, 기준일이 1899년 12월 31일이 아니라 30일이 된다.
실무적으로는 이렇다. 날짜 열은 믿기 전에 확인한다. 다섯 자리 정수로 들어왔다면 위 기준일로 받는 쪽에서 변환하고, 1900년 3월 이전 날짜는 하루가 어긋나 있다는 것을 염두에 둔다.
자주 묻는 질문
엑셀 파일을 JSON 으로 어떻게 바꾸나?
.xlsx 파일을 여기서 열고 헤더 줄을 켜 두면 행마다 객체 하나씩, 키는 열 이름에서 가져온 배열이 나온다. 대부분의 API 와 테스트 픽스처가 기대하는 모양이다.
스프레드시트가 어디로 업로드되나?
아니다. 파일은 브라우저에서 읽고 이 페이지에는 백엔드가 없다. 아무것도 전송되지 않는다 — 고객 명단이나 급여 시트를 다룰 때 갈리는 지점이 이것이다.
날짜가 45292 같은 숫자로 나온다
엑셀이 날짜를 그렇게 저장하기 때문이다. 아래 절을 보라 — 날짜 칸은 날짜가 아니라 날짜 수이고, 어떤 칸이 날짜인지 파일이 늘 말해 주지도 않는다.
.xlsx 파일이 안 열린다
이름만 바꾼 CSV 일 가능성이 가장 크다. 진짜 .xlsx 는 ZIP 압축 파일인데, 확장자만 바꾼 CSV 는 여전히 평문이라 풀 수가 없다. 그런 파일은 CSV 도구로 열면 제대로 읽힌다.
시트가 여러 개인 통합문서도 되나?
된다. 시트 목록이 나오고 오갈 수 있다. 통합문서는 한 번만 파싱하므로 전환이 즉시다.
파일 크기 제한은?
20MB 다. 그보다 크면 브라우저가 압축을 풀고 파싱하다 멈추는 일이 잦고, 멈춘 탭은 분명한 제한보다 나쁘다.
.xls 도 되나, .xlsx 만 되나?
둘 다 열린다. 서로 다른 형식이지만 — .xls 는 예전 이진 형식, .xlsx 는 오피스 2007 부터의 ZIP·XML 형식 — 미리 변환할 필요는 없다.
이 도구가 따르는 규격
- ECMA-376 — Office Open XML 파일 형식 — .xlsx 의 규격. 이 도구가 푸는 ZIP·XML 형식이다.
- Microsoft — 엑셀의 날짜 체계 — 1900·1904 날짜 체계와 위에 적은 날짜 수.
- RFC 8259 — JSON 데이터 교환 형식 — 출력 형식. 긴 숫자 ID 가 문자열로 더 안전한 이유도 여기 있다.