실무에서 급여·정산을 시스템으로 옮길 때 가장 먼저 부딪히는 벽은 엑셀 양식이 제각각이라는 점입니다. POS에서 뽑은 매출내역, 카드사 승인내역, 홈택스 현금영수증은 열 이름도 날짜 형식도 제멋대로입니다. 이 글은 그 지저분한 원본을 바꾸지 않고 엑셀 자동 파싱으로 읽어낸 방법을, 다지점 방문 케어 서비스 프랜차이즈의 급여 정산 자동화 사례를 기준으로 정리한 것입니다.
엑셀 자동 파싱이 필요한 이유
엑셀 자동 파싱은 사람이 열을 하나하나 지정하지 않아도 시스템이 스스로 열의 뜻을 알아내 표준 데이터로 바꾸는 것을 말합니다. 실무 파일은 "거래일시▼", "승인일시", "발행일자", "공급가액"처럼 같은 뜻을 다른 이름으로 씁니다. 매달 사람이 열을 맞춰 붙여넣으면, 그 순간이 곧 오류가 들어오는 지점이 됩니다.
핵심 원칙은 원본을 바꾸지 않는다는 것입니다. 클라이언트가 이미 쓰는 양식을 그대로 두고, 시스템이 흔들림을 흡수하도록 만들면 사용자는 "파일을 올리기만" 하면 됩니다. 그래서 파서는 브라우저에서 엑셀을 읽어(SheetJS) 첫 시트를 표로 만들고, 합계 행처럼 데이터가 아닌 줄은 걸러낸 뒤 표준 필드로 매핑합니다.
헤더 자동 감지: exact → partial 2패스
헤더 자동 감지는 두 번의 패스로 동작합니다. 먼저 정확히 일치하는 열 이름을 표준 필드에 배정하고, 남은 열만 부분 문자열 포함으로 한 번 더 맞춥니다. 이때 이미 배정된 표준 필드는 두 번째 패스에서 건너뛰어, 두 열이 같은 필드로 몰리는 일을 막습니다.
정확 일치를 먼저 확정해야 애매한 부분 매칭이 엉뚱한 필드에 붙지 않습니다
이 순서가 중요한 이유는, 부분 매칭을 먼저 돌리면 "금액"이 "결제금액"·"승인금액"·"공급가액" 여러 곳에 잘못 붙을 수 있기 때문입니다. 정확 일치를 먼저 확정해 두면, 애매한 부분 매칭은 남은 후보에만 적용됩니다.
날짜·금액 정규화: 섞여 들어와도 하나로
파일마다 날짜 표기가 다릅니다. 엑셀 시리얼 숫자, "25-07-01 09:22", "2026-02-13 16:00:03"이 한 파일 안에 섞이기도 합니다. 파서는 이를 모두 YYYY-MM-DD로 정규화합니다. 두 자리 연도는 50을 기준으로 2000년대·1900년대를 판정하고, 시각이 붙은 문자열은 날짜 부분만 잘라냅니다.
금액도 마찬가지입니다. "143,000원", "-", 마이너스 표기가 섞여 있어도 콤마·"원"·공백을 제거해 숫자로 바꾸고, 빈 값이나 "-"는 0으로 처리합니다. 아래처럼 정규화 규칙을 한곳에 모아두면, 새 양식이 들어와도 파서 전체를 고칠 필요가 없습니다.
| 원본 표기 | 정규화 결과 |
|---|---|
| 엑셀 시리얼 45905 | 2025-08-01 |
25-07-01 09:22 | 2025-07-01 |
2026-02-13 16:00:03 | 2026-02-13 |
143,000원 | 143000 |
- / 빈 값 | 0 |
한 셀에 여러 값이 들어올 때
가장 까다로운 건 한 셀에 여러 값이 든 경우입니다. 담당자 열에 "관리사A (70,000)\n관리사A-2 (0)"처럼 이름과 금액이 여러 줄로 들어오면, 실제로 수행한 관리사는 금액이 가장 큰 이름 하나입니다. 서비스명 열에 "관리 추가, 스페셜 케어 120분"처럼 콤마로 두 서비스가 묶여 있으면 두 항목으로 분리해 집계합니다. 단, "+"는 정상 서비스명에 들어가는 문자라 분리하지 않습니다. 이렇게 셀 단위의 흔들림까지 규칙으로 흡수해야 집계가 어긋나지 않습니다.
같은 원본이 두 용도로 갈릴 때
한 가지 미묘한 결정이 있습니다. 콤마로 묶인 서비스는 급여 집계에서는 두 항목으로 나눠야 하지만, 대사에서는 나누면 안 됩니다. 대사는 "엑셀 한 행 = 결제 한 건"을 전제로 매출과 영수증을 맞추는데, 콤마 분리로 한 행을 둘로 쪼개면 금액이 복제되어 실재하지 않는 유령 매출이 생기기 때문입니다. 그래서 파서는 결제 단위 원본을 그대로 두고, 콤마 분리는 급여 집계 단계에서만 적용합니다. 같은 원본 데이터라도 용도에 따라 다르게 해석해야 한다는 것이, 파싱을 단순한 읽기 이상으로 만드는 지점입니다.
이 파싱 단계가 탄탄해야 그 뒤의 서비스명 매핑·급여 계산·대사가 흔들리지 않습니다. 서비스명 표기를 통일하는 다음 단계는 표기가 흔들리는 서비스명을 자동으로 통일하는 설계에서 이어지고, 이 파이프라인 전체 그림은 급여 정산 자동화 사례에서 볼 수 있습니다. 엑셀을 버리지 않고 시스템으로 넘기는 관점은 엑셀을 버리지 않고 시스템으로에서도 다룹니다.
자주 묻는 질문
양식이 다른 엑셀을 어떻게 자동으로 읽나요?
열 이름을 표준 필드에 매핑하는 규칙표를 두고, 정확 일치 → 부분 포함 2패스로 자동 감지합니다. "거래일시▼"·"승인일시"·"발행일자"처럼 표기가 달라도 같은 표준 필드(거래일자)로 모으므로, 사용자가 매달 열을 지정할 필요가 없습니다.
헤더 자동 감지가 틀리면 어떻게 하나요?
자동 감지 결과는 업로드 프리뷰에서 확인할 수 있고, 매핑되지 않은 열이나 표준 필드는 경고로 노출됩니다. 정확 일치를 먼저 확정하고 부분 매칭을 나중에 적용하므로, "금액"류가 엉뚱한 열에 붙는 오탐을 줄입니다.
날짜와 금액 형식이 파일마다 다른데 괜찮나요?
괜찮습니다. 엑셀 시리얼 숫자, 두 자리·네 자리 연도, 시각이 붙은 문자열을 모두 YYYY-MM-DD로 정규화하고, 금액은 콤마·단위·마이너스를 정리해 숫자로 바꿉니다. 정규화 규칙을 한곳에 모아 두어 새 양식이 들어와도 대응이 쉽습니다.