20. 엑셀을 정리하다 — 왜 도구가 2개여야 했나
이 도구가 태어난 곳
가구 회사 일룸에서 AI 교육을 했습니다. 16명과 6주 동안 현장에서 함께 일했습니다. 거기서 같은 문제를 반복해서 만났습니다.
엑셀입니다.
엑셀은 옵니다. 바로 쓸 수가 없습니다
현장에서 만난 문제입니다.
병합셀. 소계행. 쉼표가 붙은 숫자. 날짜 형식이 제각각. 위에 제목 행이 3줄. 시트마다 구조가 다릅니다.
받은 엑셀을 분석 가능한 데이터로 만드는 데 시간이 들어갑니다. 매번. 매주. 매달.
관공서에서 온 엑셀. 대행사에서 온 리포트. 쇼핑몰 데이터. 은행 거래내역. 어디서 온 파일이든 같은 문제입니다. 받자마자 쓸 수 없습니다.
그냥 엑셀을 줘도 되긴 합니다
Claude Code에게 엑셀 파일을 그대로 던져도 대충은 분석합니다.
문제는 "대충"입니다.
병합셀이 있으면 데이터가 빠집니다. 소계행이 섞여 있으면 합계가 틀립니다. 숫자에 쉼표가 붙어 있으면 텍스트로 인식합니다. 날짜 형식이 제각각이면 정렬이 깨집니다.
적당히 돌아가는 것과 정확하게 돌아가는 것은 다릅니다. CSV로 깨끗하게 만들어서 분석하는 게 훨씬 정확합니다. 그래서 이 스킬을 만들었습니다.
"이 엑셀 정리해줘"라고 하면 됩니다. 파일을 분석하고, 문제를 찾고, 깨끗한 CSV로 만들어줍니다. 사용자가 옵션을 외울 필요가 없습니다.
처음에는 1개였습니다
하나의 도구로 만들었습니다. 엑셀을 넣으면 깨끗한 CSV가 나오는 도구.
쓰면서 문제가 드러났습니다.
어떤 파일은 이미 CSV입니다. 엑셀 변환이 필요 없습니다. 정리만 하면 됩니다.
어떤 파일은 엑셀인데, 안의 데이터는 깨끗합니다. 구조만 바꾸면 됩니다. 정리가 필요 없습니다.
1개로는 안 되는 이유가 여기에 있었습니다. 두 가지 문제는 본질이 다릅니다.
구조 문제: 병합셀, 다단 헤더, 메타데이터 행. 엑셀이라는 "그릇"이 문제입니다.
품질 문제: 소계행, 쉼표 숫자, 날짜 혼재. "안에 담긴 내용"이 문제입니다.
그래서 2개로 나눴습니다.
excel-to-csv — 그릇을 바꾸는 도구
엑셀의 구조를 정리해서 깨끗한 CSV로 변환합니다.
| 기능 | 하는 일 |
|---|---|
| 병합셀 해제 | 합쳐진 셀을 풀고 빈칸을 채움 |
| 다단 헤더 평탄화 | "서울" + "1분기" → "서울_1분기" |
| 메타데이터 건너뛰기 | 상단 제목 행 무시 |
| 멀티 시트 처리 | 시트별로 각각 CSV 생성 |
| 인코딩 변환 | EUC-KR → UTF-8 자동 처리 |
관공서 엑셀입니다. 맨 위에 이런 게 붙어 있습니다.
[2024년 상반기 매출 현황]
작성일: 2024.03.15
작성자: 김OO
(빈줄)
지역, 제품, 금액, ...
"엑셀 변환해줘"라고 하면 됩니다. 위의 행은 건너뛰고, 병합셀은 풀고, CSV로 변환합니다.
csv-clean — 안의 내용을 다듬어서 오류를 없애는 도구
CSV는 있습니다. 그런데 이 상태로 분석하면 오류가 납니다.
| 기능 | 하는 일 |
|---|---|
| 소계행 제거 | "소계", "합계", "total" 포함 행 삭제 |
| 숫자 정리 | "1,234,567" → 1234567, "₩500,000" → 500000 |
| 날짜 통일 | 혼재 형식 → YYYY-MM-DD |
| 크로스탭 변환 | 가로형 표 → 세로형 (분석용) |
숫자에 쉼표가 붙어 있으면 계산이 안 됩니다. 날짜가 "2024-01-05", "2024.01.10", "20240115", "2024년 1월 20일" 네 가지 형식으로 섞여 있으면 정렬이 안 됩니다.
"숫자 정리해줘", "날짜 통일해줘"라고 하면 됩니다.
소계행 제거할 때, "회계팀", "설계팀"처럼 "계"가 들어간 단어는 건드리지 않습니다. 정확히 소계/합계 의미인 행만 제거합니다.
각각 독립적으로 씁니다
구조만 바꾸면 되는 파일이 있습니다. 엑셀 형식이 복잡하지만 안의 데이터는 깨끗한 경우. excel-to-csv만 쓰면 됩니다.
구조는 이미 CSV인데 안의 데이터에 오류가 있는 경우도 있습니다. 소계행이 섞여 있거나, 숫자에 쉼표가 붙어 있거나. csv-clean만 쓰면 됩니다.
둘 다 필요하면 순서대로 실행됩니다.
파이프라인 — 함께 쓰면 자동입니다
순서대로 돌아갑니다.
1. 엑셀 구조 분석 (문제 자동 감지)
2. 구조 문제 해결하며 CSV 변환 (excel-to-csv)
3. CSV 품질 분석 (문제 자동 감지)
4. 품질 문제 정리 (csv-clean)
"이 엑셀 정리해줘"라고 하면 Claude가 두 스킬을 순서대로 실행합니다. 중간 과정을 신경 쓸 필요 없습니다.
각 단계에서 --info 옵션이 문제를 자동 감지합니다. 실제 출력은 이렇습니다.
--- Complexity Analysis ---
[MULTI_HEADER] 2-row header detected (rows 1-2). Suggested: --flatten-headers
[METADATA_SKIP] 3 metadata rows before header. Suggested: --skip-rows 3
[SUBTOTAL_ROWS] 3 rows with subtotals. → csv-clean --remove-subtotals
[TEXT_NUMBERS] 4 columns with formatted numbers. → csv-clean --clean-numbers
구조 문제는 excel-to-csv 옵션을 제안하고, 품질 문제는 csv-clean 사용을 제안합니다. 사용자는 이 출력을 볼 필요도 없습니다. Claude가 읽고 실행합니다.
원본 파일은 건드리지 않습니다. 새 파일이 생깁니다.
스킬 요약
| 항목 | excel-to-csv | csv-clean |
|---|---|---|
| 역할 | 그릇을 바꾼다 (구조 변환) | 안의 내용을 다듬는다 (품질 정리) |
| 입력 | .xlsx / .xls 파일 | .csv 파일 |
| 트리거 | "엑셀 변환해줘" | "데이터 정리해줘" |
| 독립 사용 | 가능 | 가능 |
| 의존성 | openpyxl | pandas |
자주 묻는 질문
Q. 시트 10개짜리 엑셀이면 CSV도 10개 나오나요?
맞습니다. 시트마다 CSV 한 개씩 생깁니다. 파일명에 시트 이름이 붙습니다. 시트 구조가 다 다를 때도 각자 처리합니다.
Q. 정리된 CSV를 다시 엑셀로 받을 수 있나요?
지금은 안 됩니다. 이 도구는 엑셀 → CSV 방향만 처리합니다. 엑셀로 다시 만들려면 엑셀에서 파일 열고 .xlsx로 저장하면 됩니다.
Q. csv-clean이 소계행을 잘못 잡아서 실제 데이터를 지우면요?
원본 CSV는 건드리지 않습니다. 새로 만들어진 _cleaned.csv에만 반영됩니다. 결과가 이상하면 원본으로 다시 돌리면 됩니다.
다음 글에서
도구를 만드는 것과 도구를 쓰는 것은 다릅니다. 이 스킬은 다른 사람의 문제를 보고 만든 도구입니다. 다음 글에서는 도구를 만드는 쪽 이야기를 합니다.