서로 다른 두 가지 일이 일어납니다. 긴 숫자가 4.02177E+19처럼 보이는 것은 표시 형식 문제일 수 있어서, 열 너비를 넓히거나 숫자 서식을 적용하면 달라집니다. 하지만 엑셀은 CSV를 열 때 값 자체도 변환합니다. 숫자 셀은 유효 숫자 15자리까지만 저장하고, 앞자리 0은 숫자의 일부로 보지 않습니다. 이미 바뀐 자릿수는 서식으로 되돌릴 수 없습니다. 값을 지키려면 엑셀이 변환하기 전에 텍스트 셀로 만들어야 합니다. 해당 열을 텍스트로 가져오거나, CSV를 Excel로 변환하는 도구가 기본으로 만드는 것처럼 처음부터 셀이 텍스트인 XLSX를 여세요.
ID와 코드가 담긴 파일을 엑셀이 어떻게 바꾸는가
CSV 파일은 셀 유형이 없는 일반 텍스트입니다. 그래서 더블클릭으로 열면 엑셀이 값마다 숫자인지, 날짜인지, 텍스트인지 추측합니다. 아래의 가상 파일에는 이 추측이 자주 틀리는 값들을 모았습니다.
| 값 종류 | CSV 원본 | 엑셀에서 CSV를 연 경우 | ViewCSV XLSX의 셀 |
|---|---|---|---|
| 앞자리 0이 있는 코드 | 00412 | 412 | 00412 |
| 20자리 주문번호 | 40217730091152400016 | 4.02177E+19 | 40217730091152400016 |
| 그다음 주문번호 | 40217730091152400017 | 4.02177E+19 | 40217730091152400017 |
| + 기호가 붙은 전화번호 | +15550100234 | 15550100234 | +15550100234 |
| 날짜처럼 보이는 부품 코드 | 3-12 | 12-Mar | 3-12 |
| E가 들어간 로트 코드 | 12E3 | 1.20E+04 | 12E3 |
| 수식처럼 보이는 메모 | =SUM(F2:F3) | 17 | =SUM(F2:F3) |
두 주문번호 모두 4.02177E+19로 보이지만 이것은 표시일 뿐입니다. 내부적으로 엑셀은 앞의 15자리만 남겼기 때문에 두 셀은 이제 같은 값 40217730091152400000을 갖습니다. 열을 넓혀도 보이는 것은 원래 숫자가 아니라 이 0들이고, VLOOKUP이나 중복 검사는 두 주문을 하나로 취급합니다.
이 행들은 변환 도구의 예시 데이터입니다. CSV를 내려받아 직접 엑셀에서 열고 비교해 보세요.
지수 표기는 표시일 뿐, 사라진 자릿수는 실제로 없어진다
4.02177E+19는 일반 서식 열의 너비가 좁을 때 큰 숫자를 이렇게 보여 주는 것일 뿐이며, 열을 넓히거나 숫자 서식을 적용하면 더 많은 자릿수가 보입니다. 진짜 손실은 그보다 먼저 일어납니다. 엑셀은 숫자를 유효 숫자 15자리 정밀도로 저장하므로, 변환하는 순간 16번째 자리부터는 모두 0이 됩니다. 16자리 카드 번호나 계좌번호라면 이미 마지막 한 자리를 잃은 것입니다.
- 앞자리 0이 사라지는 이유는
00412와412가 숫자로는 같기 때문입니다.00000같은 사용자 지정 서식으로 다섯 자리로 보이게 할 수는 있지만 셀 값은 여전히 412이고, 길이가 제각각인 코드는 이 방법으로 되살릴 수 없습니다. - 긴 ID는 15번째 이후 자릿수를 모두 잃습니다. 변환된 뒤 저장된 파일에서는 어떤 서식, 함수, 도구로도 되찾을 수 없습니다.
3-12나12E3같은 코드는 날짜나 지수 표기 숫자가 되고, 원래 텍스트는 셀에 남지 않습니다.=로 시작하는 값은 수식으로 처리되어 계산 결과로 바뀝니다.
대신 텍스트 셀로 된 XLSX 만들기
CSV와 달리 .xlsx 통합 문서는 셀마다 유형을 저장하며, 엑셀은 텍스트 셀을 쓰인 그대로 보여 줍니다. CSV를 Excel로 변환하는 도구는 기본적으로 모든 값을 텍스트 셀로 씁니다. 브라우저 안에서 작동하며 파일을 업로드하지 않습니다.
- CSV를 Excel로 변환하는 도구에서 CSV를 엽니다. 위의 행으로 해 보려면 예시로 해 보기를 누릅니다.
- 입력 아래의 표를 확인합니다. ID, 앞자리 0, 코드가 파일과 똑같이 보입니다.
- 값 유형은 모든 값을 텍스트로 유지로 둡니다.
- XLSX 다운로드를 누르고 통합 문서를 엑셀에서 엽니다.
통합 문서에서는 00412, 두 주문번호의 20자리 전체, +15550100234, 3-12, 12E3, =SUM(F2:F3)이 모두 텍스트 셀입니다. 수식처럼 보이는 값도 일반 텍스트로 저장되므로 파일을 열어도 계산되지 않습니다. 숫자처럼 보이는 텍스트에는 엑셀이 작은 녹색 삼각형(텍스트로 저장된 숫자)을 표시할 수 있지만 값은 바뀌지 않습니다.
quantity나 unit_price로 계산해야 한다면 엑셀에서 열 전체를 변환하지 말고 다음 절을 읽어 보세요. 엑셀에서 한꺼번에 변환하면 실수로 선택한 ID 열까지 변환됩니다.실제 숫자도 필요할 때
숫자와 true/false 감지는 열의 모든 값이 엑셀에 그대로 저장할 수 있는 단순한 숫자일 때만 그 열을 숫자로 만듭니다. 예시에서는 quantity와 unit_price가 숫자가 되고, customer_id(앞자리 0), order_ref(15자리 초과), part_code, note는 텍스트로 남습니다.
감지는 값의 의미가 아니라 형태를 보고 열 단위로 결정합니다. +15550100234 같은 값만 있는 열은 부호 있는 정수로, 12E3 같은 값만 있는 열은 지수 표기로 읽히므로, 예시에서도 phone과 lot_code는 숫자가 되어 버립니다. 이런 파일은 기본값을 유지하고 수량 셀만 엑셀에서 변환하세요. 셀을 선택한 뒤 오류 아이콘에서 숫자로 변환을 고르면 됩니다.
엑셀에서 CSV로 시작해야 한다면
변환한 통합 문서를 쓸 수 없다면 CSV를 더블클릭하지 말고 가져오기 기능을 쓰되, 데이터를 불러오기 전에 위험한 열을 텍스트로 지정하세요. 최신 Microsoft 365용 엑셀에서는 데이터 > 텍스트/CSV에서 > 데이터 변환을 차례로 고르고, 자동으로 추가된 변경된 유형 단계를 지운 다음 ID 열을 텍스트로 지정하고 로드합니다. 이 과정과 예전 텍스트 마법사는 CSV 파일을 엑셀로 가져오는 방법에서 설명합니다.
최근 Microsoft 365용 엑셀과 Excel 2024 빌드에는 데이터 옵션에 자동 데이터 변환 설정도 있어서, 앞자리 0, 긴 숫자, E 표기, 날짜처럼 보이는 텍스트의 변환을 막을 수 있습니다. 어떤 항목이 있고 이름이 무엇인지는 버전과 플랫폼에 따라 다르며, 이 설정은 내 엑셀에만 적용되고 동료의 엑셀에는 영향을 주지 않습니다.
값을 지켜 주지 못하는 방법
- 값을 감싼 큰따옴표(
"00412")는 CSV를 읽는 프로그램에 값의 시작과 끝을 알려 줄 뿐입니다. 따옴표로 감싼 숫자도 엑셀은 똑같이 변환합니다. - UTF-8 BOM은 엑셀이 한글 같은 문자를 올바르게 읽는 데 도움이 되지만, 셀 유형과는 상관이 없습니다.
- 연 다음에 열을 텍스트 서식으로 바꾸기는 너무 늦습니다. 변환은 이미 끝났습니다.
="00412"같은 수식 감싸기는 수식을 계산하는 스프레드시트에서만 통합니다. 다른 CSV 리더, 데이터베이스, 스크립트는="00412"라는 문자 그대로를 받으므로 파일 속 데이터는 더 이상 ID가 아닙니다.- 앞에 붙인 아포스트로피(
'00412)는 수식이 아닙니다. 엑셀에 직접 입력하면 텍스트라는 표시가 되고 화면에는 보이지 않습니다. 하지만 CSV 파일 안에서는 그냥 문자 하나여서, 다른 프로그램은'00412를 값으로 받습니다. - XLSX의 진짜 텍스트 셀은 군더더기 문자 없이
00412라는 값을 그대로 지킵니다. 변환 도구가 쓰는 것이 바로 이것이며, ViewCSV는 수식 감싸기도 아포스트로피도 덧붙이지 않습니다.
제한 사항
변환 도구는 최대 25MB, 100,000행, 250열, 200만 셀까지 처리하며, 통합 문서 하나에 시트 하나를 만듭니다. 이미 반올림된 ID나 사라진 0이 저장된 파일은 변환해도 고칠 수 없으니 원래 시스템에서 다시 내보내세요. ViewCSV 테스트는 생성된 XLSX의 셀 유형을 별도의 독립적인 리더로 확인합니다. 엑셀 버전마다 화면에 표시하는 방식은 다를 수 있습니다.
출처
Microsoft 문서를 저희 표현으로 요약했습니다. 메뉴 이름은 사용하는 엑셀 버전에 따라 다를 수 있습니다.