스프링 poi 활용 방법

poi 와 엑셀

  • 스프링이 엑셀을 추출하거나 생성할 때 poi라는 라이브러리를 주로 사용한다.
  • poi는 활용하기 다소 까다롭다. 왜냐하면 1) 엑셀 자체의 구조가 복잡하고 2) 데이타 타입 변경의 문제가 있다.

엑셀의 구조

  • 파일 -> sheet -> row -> cell
  • 엑셀을 추출할 때 위의 순서로 추출한다.
Workbook workbook = WorkbookFactory.create(file); // 파일을 가져온다.
Sheet sheet = workbook.getSheetAt(i); // 시트를 가져온다.
Row row = sheet.getRow(j); // row를 가져온다. 
Cell cell = row.getCell(k);// 셀의 값을 가져온다

엑셀의 데이타 타입

  • 엑셀에는 다양한 데이타 타입이 있다. 자바와 유사하지만 또 다르다. 구체적인 내용은 굳이 알 필요가 없다. 나는 간단하게 아래처럼 처리한다. 그리고 참고로 나는 무조건 String 으로 변경했다.
  • 아래는 모든 데이타를 String으로 변경하였다. 데이타베이스나 다른 파일과의 데이터 통신 과정에서 나는 개인적으로 가능하면 String으로 처리하는게 가장 좋다고 생각한다. 그게 안전하고 빠르고 고민할 거리가 적어진다.
    public Optional<String> parseCellIntoString(Cell cell) {
        String value = "";
        if (cell != null) {
            // 타입 별로 내용을 읽는다
            switch (cell.getCellType()) {
                case NUMERIC:
                    double numericCellValue = cell.getNumericCellValue();
                    if (numericCellValue == 0) {
                        return Optional.empty();
                    }
                    value = String.valueOf((int)numericCellValue);
                    break;
                case STRING:
                    value = cell.getStringCellValue();
                    if (value.isEmpty()||value.equals("")) {
                        return Optional.empty();
                    }
                    break;
                default:
                    return Optional.empty();
            }
        }
        value = value.trim();
        if(value.equals(""))
            return Optional.empty();

        return Optional.of(value);
    }

의존성

  • 나의 경우 아래의 의존성을 사용한다.
  • poi 의 엔진도 다양하고 버전이나 엔진에 따라 이넘 등 조금씩 다르다.
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>4.1.2</version>
</dependency>

좋은 웹페이지 즐겨찾기