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행이상은 분할 업로드 권장
엑셀은 버리지 않습니다. 더 잘 쓰게 만듭니다.