CASE STUDY
Excel 데이터 변환 자동화 프로그램
Excel에 입력된 업무 명칭을 Grid가 요구하는 내부 코드로 변환하고, 파일별 규칙을 설정·검증할 수 있는 로컬 도구입니다.
- 기간
- 2026.02 — 현재
- 역할
- 기획 · 설계 · 개발
- 환경
- HIAIR KOREA MES / WinForms 업무
- 기술
- Python · PySide6 · openpyxl · JSON · VBA · Excel COM
SNAPSHOT
한눈에 보는 결과
- 문제
- 처음에는 업무 명칭을 Excel 파일에 그대로 기입했지만, Grid에 데이터를 넣으려면 파일별 명칭을 내부 코드로 변환해야 했습니다.
- 내 역할
- VBA 수동 변환 과정 분석, 규칙 엔진 구조 설계와 PySide6 프로그램 개발
- 핵심 변화
- VBA에 직접 넣던 변환 규칙을 GUI에서 설정·검증하고, 파일별 명칭을 코드로 변환할 수 있게 했습니다.
- 확인된 범위
- PySide6 GUI, 규칙 저장·불러오기, Dry Run 검증, 새 XLSX 생성과 매크로 포함 XLSM 내보내기 흐름을 구현했습니다.
BEFORE / AFTER
Before → After
기존 흐름
- Connection Error 같은 업무 명칭을 Excel에 직접 기입해 파일로 관리했습니다.
- Grid 입력을 위해 VBA 매크로를 직접 작성·삽입하고, 파일마다 다른 조건을 수작업으로 수정했습니다.
변경 후
- GUI에서 대상·참조 컬럼과 단일·복합 조건을 직접 구성합니다.
- Dry Run으로 코드 변환 결과와 잘못된 조합을 확인한 뒤 새 파일로 출력합니다.
DISCOVERY
문제를 어떻게 발견했는가
처음에는 업무 명칭을 Excel 파일에 그대로 기입해 관리했습니다. 이후 Grid 입력을 위해 Excel 데이터를 내부 코드로 바꾸기 시작했고, 처음에는 VBA 매크로를 직접 삽입했습니다. 하지만 파일마다 데이터 패턴과 변환 조건이 달라질 때마다 VBA를 수정해야 했습니다. Slack·OpenAI·n8n으로 자연어 규칙을 받는 방식도 시도했지만, 명칭 해석보다 파일별 코드 조건을 직접 설정하는 편이 적합하다고 판단해 프로그램으로 전환했습니다.
DECISIONS
왜 이 구조를 선택했는가
- 명칭을 그대로 저장하는 방식에서 Grid 입력에 필요한 코드 변환을 별도 단계로 분리했습니다.
- VBA를 매번 직접 삽입하는 대신 파일별 변환 규칙을 데이터로 관리하도록 구성했습니다.
- Slack·OpenAI·n8n 기반 자연어 규칙 설정을 시도했지만, 다양한 표현과 데이터 패턴을 안정적으로 처리하기 위해 GUI 기반 규칙 편집기로 전환했습니다.
- 사용자가 직접 설정할 수 있도록 PySide6 기반 화면으로 구현했습니다.
- 규칙 저장과 불러오기를 JSON 프로필로 제공해 같은 변환 조건을 다시 사용할 수 있게 했습니다.
- 여러 조건을 하나의 복합 키로 매핑해 제품·PART처럼 서로 연관된 값의 조합이 참조 데이터에 존재하는지 검증했습니다.
- 변환 전 Dry Run을 두어 없는 명칭, 중복 참조와 미일치 정책을 결과 파일 생성 전에 확인하도록 했습니다.
SYSTEM ARCHITECTURE & WORKFLOW
분석·규칙·변환 구조
대상 Excel 파일
검사 데이터와 업무 입력 시트
코드 정보 시트
명칭과 내부 코드의 매핑 기준
시트·헤더 분석
시트명, 헤더와 데이터 시작 행을 읽어 현재 파일 구조를 파악
사용자 규칙 설정
- 01
헤더·컬럼 매핑
대상 컬럼과 참조 컬럼을 GUI에서 선택
- 02
다중 조건 코드 매핑
여러 조건을 하나의 복합 키로 구성
- 03
미일치·중복 정책
유지·삭제·기록·중단 정책을 선택
검증·변환 실행
- 01
Dry Run 미리보기
변환 전 성공·실패와 대상 행을 확인
- 02
조합 유효성 검증
없는 명칭과 허용되지 않은 코드 조합을 오류 처리
- 03
결과 파일 생성
원본을 유지하고 새 XLSX 또는 XLSM을 출력
결과·오류 로그 확인
변환·미일치·중복 처리 결과를 확인
JSON 규칙 프로필 저장
설정한 규칙을 다음 변환 작업에 재사용
변환 결과 Excel
업무에 사용할 새 XLSX 또는 매크로 포함 XLSM
VERIFICATION
검증
- 대상 시트와 참조 시트의 헤더·컬럼을 GUI에서 선택하도록 구현했습니다.
- 단일 조건과 여러 조건을 조합한 코드 매핑 규칙을 처리하도록 구현했습니다.
- 없는 명칭, 중복 참조와 조건 불일치에 대해 규칙별 처리 정책을 적용하도록 구현했습니다.
- Dry Run에서 실제 저장 전에 변환 로그와 성공·실패 결과를 확인하도록 구성했습니다.
- 일반 변환은 새 XLSX로 저장하고, 별도 경로에서는 생성된 VBA와 Excel COM을 이용해 XLSM을 내보내도록 구현했습니다.
- 테스트 코드에는 단일·복합 조건, 미일치·중복 정책, 원본 보존과 XLSM 출력 실패 경로를 검증하는 시나리오가 포함되어 있습니다.
SCOPE
적용 범위와 한계
- 현재 프로필 저장 방식은 SQLite가 아닌 JSON 파일입니다.
- 일반 XLSX 변환은 openpyxl 기반이며, XLSM 생성은 Windows Excel COM과 VBA 프로젝트 접근 권한이 필요합니다.
- XLSM 관련 테스트는 실제 Excel이 아닌 FakeExcel 대체 객체를 사용하므로, VBA 실행 자체의 운영 검증은 별도입니다.
- 실제 Excel 환경에서 VBA 컴파일과 Worksheet_Change 실행 결과는 별도 운영 검증이 필요합니다.
- 처리 시간과 메모리 사용량의 변경 전후 수치는 별도로 측정하지 않았습니다.