PORTFOLIO
05 · EXCEL INTEGRATION

엑셀 Import · Export 연계

수십 년간 누적된 단가표 · BOM · 견적서 양식을 버리지 않습니다. 현업이 익숙한 엑셀을 그대로 사용하되, CPQ가 검증·저장·이력 관리를 담당하여 "엑셀 자유도 + 시스템의 정합성"을 동시에 확보합니다.

왜 엑셀 연계가 필수인가

현업 학습 비용 최소화

품질·자재 담당자는 평생 엑셀로 일해 왔습니다. 익숙한 양식 그대로 일괄 등록·수정이 가능해야 합니다.

대량 마스터 일괄 처리

수천 건의 단가·옵션·BOM을 화면에서 한 건씩 입력할 수 없습니다. 엑셀 업로드 한 번이 답입니다.

외부 협력사와 양식 호환

고객사 · 벤더와 주고받는 견적·발주서는 여전히 xlsx입니다. CPQ가 그 양식을 그대로 출력합니다.

지원 시나리오

구분대상 데이터방향처리 방식주기
마스터제품 단가표Import일괄 업로드 + 검증 리포트월 1회 / 수시
마스터옵션 호환성 규칙Import템플릿 기반 업로드분기 1회
마스터고객사 등급 단가Import업로드 + 미리보기 승인수시
거래견적서Export회사 양식 PDF / xlsx 자동 생성건별
거래BOM 명세서Export승인 견적 → BOM xlsx건별
분석월간 견적 실적Export피벗 가능한 raw 데이터월 1회 / 수시

① 단가표 일괄 Import — 흐름

템플릿 다운로드

관리자가 표준 단가표 템플릿(xlsx)을 다운로드합니다. 컬럼·자료형·필수값이 사전 정의되어 있습니다.

엑셀에서 작성 / 수정

현업이 익숙한 엑셀에서 단가를 입력하고 저장합니다. 수식·필터·복사붙여넣기 모두 자유롭게 사용 가능.

업로드 & 자동 검증

CPQ가 행 단위로 자료형·필수값·중복·참조 무결성을 검증하고, 오류 행을 컬러로 표시한 결과 시트를 돌려줍니다.

미리보기 → 승인 → 반영

관리자는 검증 통과 데이터의 변경 전/후를 미리보기 한 뒤 승인합니다. 승인 즉시 새 버전으로 마스터에 반영됩니다.

변경 이력 자동 기록

누가 언제 어떤 행을 어떻게 바꿨는지 모두 감사 로그로 남습니다. 이전 버전으로 롤백도 가능합니다.

업로드 화면 예시

여기에 엑셀 파일을 끌어다 놓으세요

지원 형식 : .xlsx, .xls (최대 10MB)

② 단가표 템플릿 (Import 예시)

price_master_2026Q2.xlsx
시트 1 / 단가마스터
A · 제품코드 B · 제품명 C · 시리즈 D · 정격전압(V) E · 정격전류(A) F · 기준단가(원) G · 적용일
1 SG-H22-A1고압 수배전반 22.9kVHV-Series 22,90063012,500,0002026-04-01
2 SG-H22-A2고압 수배전반 22.9kVHV-Series 22,9001,25015,800,0002026-04-01
3 SG-L04-B1저압 분전반 380VLV-Series 3804003,200,0002026-04-01
4 SG-L04-B2저압 분전반 380VLV-Series 3808004,650,0002026-04-01
5 SG-AC-C1자동제어반 (Type C)AC-Series 2201002,800,0002026-04-01

③ 검증 결과 리포트 예시

CPQ가 업로드된 파일을 행 단위로 검증한 결과를 반환합니다. 색상으로 정상 · 경고 · 오류를 구분합니다.

price_master_2026Q2_검증결과.xlsx
총 5행 · 정상 3 · 경고 1 · 오류 1
제품코드 기준단가 적용일 검증 결과 메시지
1 SG-H22-A112,500,0002026-04-01 ✔ 정상신규 추가
2 SG-H22-A215,800,0002026-04-01 ✔ 정상단가 변경 (+3.2%)
3 SG-L04-B13,200,0002026-04-01 ⚠ 경고전월 대비 −12%, 승인자 확인 필요
4 SG-L04-B24,650,0002026-04-01 ✔ 정상변경 없음
5 SG-AC-C92,800,000- ✘ 오류존재하지 않는 제품코드 / 적용일 누락

④ 견적서 Export — 회사 양식 그대로

QUOTE_Q-2604-0128_대성ENC.xlsx
발행일 2026-04-10
견 적 서
1고객사대성 E&C 주식회사견적번호Q-2604-0128
2프로젝트평택 데이터센터 증설발행일2026-04-10
3담당자김영업 과장 / 010-1234-5678유효기간2026-05-10
4 품목사양수량단가금액비고
5 SG-H22-A222.9kV / 1,250A 415,800,00063,200,000HV 옵션 포함
6 SG-L04-B2380V / 800A 124,650,00055,800,000표준
7 SG-AC-C1자동제어반 Type C 82,800,00022,400,000원격감시 옵션
8 공급가액 141,400,000
9 부가세 (10%) 14,140,000
10 합계 155,540,000

⑤ Export 옵션

📄 견적서 양식

회사 표준 양식 · 영문 양식 · 고객사 맞춤 양식 중 선택. 로고·인감 자동 삽입.

xlsxpdf

🧾 BOM 명세서

승인 견적의 자재를 부품 단위까지 전개하여 자재팀·생산팀에 전달.

xlsxcsv

📊 분석용 Raw 데이터

월간/분기 견적 raw 데이터를 피벗 가능한 형태로 다운로드. 경영진 보고용.

xlsxcsv

⑥ 기술 구현 (백엔드 예시)

Spring Boot + Apache POI 기반의 단순화된 Import 처리 코드입니다.

// PriceMasterImportService.kt
fun importPriceMaster(file: MultipartFile): ImportResult {
    val workbook = WorkbookFactory.create(file.inputStream)
    val sheet = workbook.getSheetAt(0)
    val errors = mutableListOf<RowError>()
    val validRows = mutableListOf<PriceRow>()

    sheet.drop(1).forEachIndexed { idx, row ->
        try {
            val code  = row.getCell(0).stringCellValue.trim()
            val price = row.getCell(5).numericCellValue.toLong()
            val date  = row.getCell(6).localDateTimeCellValue.toLocalDate()

            validator.validate(code, price, date)        // 자료형·참조 검증
            validRows += PriceRow(code, price, date)
        } catch (e: ValidationException) {
            errors += RowError(rowNum = idx + 2, message = e.message)
        }
    }

    // 검증 결과 시트 생성 → 사용자에게 다운로드 제공
    val reportFile = reportWriter.writeReport(validRows, errors)

    return ImportResult(
        total   = sheet.lastRowNum,
        success = validRows.size,
        failed  = errors.size,
        report  = reportFile
    )
}

적용 라이브러리 & 기준

영역라이브러리비고
엑셀 읽기 / 쓰기Apache POI 5.xxlsx · xls 모두 지원, 스트리밍 모드로 대용량 처리
템플릿 기반 출력JXLS마커 기반 템플릿으로 회사 양식 그대로 출력
CSVOpenCSV분석/협력사 데이터 교환용
PDF 변환Aspose.Cells / LibreOffice headless견적서 PDF 자동 생성
업로드 한도최대 10MB / 50,000행이상은 분할 업로드 권장
엑셀은 버리지 않습니다. 더 잘 쓰게 만듭니다.