Developer MJ Story

[Java/Excel POI] POI apache cell 서식 적용 하는 방법 본문

Software/Java

[Java/Excel POI] POI apache cell 서식 적용 하는 방법

집근처 2014. 7. 16. 13:32
반응형

요새 엑셀로 많은 일들을 하고 있어서, 엑셀 관련 포스팅이 많은 것 같습니다.

이번 포스팅 주제는 POI library를 이용해서 cell 서식 적용하는 방법입니다.

사실 별거 아니지만……역시 모르면 삽질을 하는 것이지요.. 몇 일 동안 엄청 삽질과 검색을 했습니다.

검색으로 웬만한 건 다 찾을 수 있는데, 이상하게.. 이번 문제는 못 찾겠더라고요.

 

비슷한 질문을 보고, 이리저리 바꿔도 보고… 했는데! …... 왜!! 안될을까요? ㅋ

결론은 마지막에 알려 드리도록 하겠습니다. ㅋ

 

먼저 서식이 뭐냐 면. Data를 아래와 같이 표현하는 것을 말합니다.

보기 좋게?, 보고 싶은 데로 표현하는 것인데, 같은 데이터를 보더라도 서식이 적용 된 것과 적용 되지 않은 것은 가독성이 엄청 차이가 납니다.

예를 들어 백 만원을 읽을 때 1000000원 이러면……으잉??

이러지만, 1,000,000 이러면, 보자마자 백 만원이구나 할 수 있지요.

 

 

아래 소스는 1,000 단위로 콤마(,)를 넣어 주는 서식을 cell 에 적용한 것입니다.

 

    void setCellFormat(int column, int row){

        XSSFCellStyle cellStyle = mWorkbook.createCellStyle();

        XSSFDataFormat format = mWorkbook.createDataFormat();

        cellStyle.setDataFormat(format.getFormat("#,##0"));

        XSSFRow xssfRow = mFirstSheet.getRow(row);

        XSSFCell cell = xssfRow.getCell(column);

        cell.setCellStyle(cellStyle);

    }

 

코드는 매우 간단합니다.

setCellFormat이라는 함수에서 columns과 row를 인자로 받아 해당 column과 row에 해당하는 cell을 찾습니다.

그리고 setCellStyle로 원하는 format으로 설정!

 

하고 짠! 보니까 그대로….헉!

물론 잘 되는 분들도 계실 겁니다.

제가 안되었던 이유는 해당 cell 값이 String 이였기 때문입니다. Orz

이렇게 쉬웠던 문제를 해결 못해 받은 스트레스가 장난 아니었다는 게…..Orz

 

String 이기 때문에 1,000 단위를 인식 하지 못하기 때문에 원하는 대로 값이 변경 되지 않은 것이었습니다.

그래서 바뀐 소스는 아래와 같습니다.

 

    void setCellFormat(int column, int row){

        XSSFCellStyle cellStyle = mWorkbook.createCellStyle();

        XSSFDataFormat format = mWorkbook.createDataFormat();

        cellStyle.setDataFormat(format.getFormat("#,##0"));

        XSSFRow xssfRow = mFirstSheet.getRow(row);

        XSSFCell cell = xssfRow.getCell(column);

        

        double d = Double.parseDouble(cell.toString());        

        cell.setCellType(Cell.CELL_TYPE_NUMERIC);

        cell.setCellValue(d);        

        cell.setCellStyle(cellStyle);

    }

 

간단하게 기존 cell 값을 POI에서 사용하는 double로 변경하고 이를 cell 에 반영하고, 서식 적용!

참 쉽죠??

반응형