본문 바로가기
스프링 웹 개발

java(spring) poi 라이브러리 적용하기 ( 자바 엑셀 다운 예제 POI)

by 배추잠자리 2021. 5. 11.
반응형

 

자바를 많이쓰고, 그중에 웹 분야에서는 스프링 프레임워크를 많이 쓰기때문에

통계작업이나 국가기반사업 혹은 CMS 관련 분야에서는 POI를 활용한 엑셀다운을

많이 쓰는것 같아요 .

 

POI를 적용해보면서 간혹 막히는 부분마다 힘들게 구글링을 했던적이 있어서

검색해도 잘 안나오는 기능들과 모든 기능을 한번씩 사용해봤습니다 ~

 

jsp와 java 전체소스도 포함되어 있으니 참고하세요.

 

▶ 먼저 스프링 레거시 프로젝트 (mvc) + maven 기반으로 프로젝트를 생성해준다.

프로젝트 생성 후 pom.xml 에 poi 적용

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>3.9</version>
</dependency>

 

 

▶ 프로젝트 구조잡기 ( PoiController.java 추가 )

프로젝트 구조

굳이 jsp를 추가하지 않고 기본으로 생성되는 home.jsp를 활용하겠다.

PoiController.java를 추가해주면 된다.

src/main/resources/ 밑에 template/img 밑에 test.jpg 를 넣어두었는데

엑셀파일에 이미지 삽입을 위한 사진이다.

 

결론은 home.jsp는 그대로 사용하고 poiController.java와 test.jpg만 추가해주면 끝!

 

 

 

▶ jsp 작성하기

 

jsp 소스 작성

 

직접 작성하는 분들은 utf-8 설정을 해주길 바래요~~

 

ExcelForm은 실제로 데이터를 날짜조회를 한것처럼 예시를 들어봤다.

예를들어 5월1일 부터 5월 30일을 사용자로부터 입력받아서

그 날짜 데이터를 통해 DB를 조회해서 엑셀로 다운로드하는것처럼 !!!!

 

그래서 엑셀다운 버튼을 클릭하면 formData를 가지고,

poiExcel() 이라는 함수를 타고,  /poiExcel uri로 가져갈거다 !

/poiExcel 은 아직 컨트롤러를 작성하지 않았지만, 편의상 미리 작성.

 

home.jsp 를 작성한 웹 화면

 

home.jsp 소스 참고

 

 

 

▶ poiController.java 작성하기 (1) - 전체 소스는 맨 아래

 

poiController.java 작성 (1)

 

컨트롤러의 구조를 갖춰주고.

웹에서 넘어온 day1 과 day2 를 잘 받아서 출력해본다.

 

콘솔창에 2021-05-01 ~ 2021-05-30  이라고 잘 뜨면 컨트롤러 연결이 잘 된것이다 !

 

그리고 날짜조회를 통해 DB에서 받아온 것처럼 list 에 데이터를 넣어주자 !

 

 

▶ poiController.java 작성하기 (2) - 전체 소스는 맨 아래

 

엑셀의 타이틀을 작성해보자.

 

작성한 list 하단부에 작성해주면 된다 !!!!!

주석으로 설명이 되어있지만.

Workbook 는 엑셀 객체를 생성한다는 개념.

Sheet는 엑셀의 시트

CellStyle는 엑셀의 셀 스타일

Font 는 엑셀의 글씨스타일

Row 는 행,  Col 은 열,  Cell 은 셀 

setCellValue 는 셀에 값을 넣는 개념이다.

 

순서는 row(행)를 생성하고, col(열)을 작성한 후에 Cell에 적용하는 개념이다.

예를 들어 첫번째행 첫번째열이면  교차점인 첫번째줄의 첫번째 셀이 되는 것이다.

 

하단의 빨간 네모는 엑셀을 파일로 생성해주는 부분.

 

이부분까지만 작성하고 톰캣을 실행하여 

엑셀다운 버튼을 클릭해봐도  엑셀다운로드가 가능하다 !!!!

타이틀을 작성해서 삽입해놨기때문에 !!!!

 

 

 

▶ poiController.java 작성하기 (3) - 전체 소스는 맨 아래

 

조회날짜와 헤더를 작성해보자.

 

엑셀파일을 생성해주는 소스코드 위에다가 작성을 해주어야한다 ! ( 헷갈리면 전체소스 참고 )

 

Cell을 만들고 Cell.setCellValue(" ") ;

이 안에 값을 넣으면 해당 셀에 값이 들어간다.

 

첫번째 셀에는 순번 이라는 문자열을

두번째 셀에는 이름 이라는 문자열을 삽입했다고 보면 된다 !

 

 

▶ poiController.java 작성하기 (4) - 전체 소스는 맨 아래

list 데이터를 삽입해보자

 

for문을 통해서 list를 엑셀에 담는 부분이다.

맨 아래부분의 setCellFormula(""); 는 엑셀의 함수식을 적용할 수 있다.

 

 

▶ poiController.java 작성하기 (5) - 전체 소스는 맨 아래

 

엑셀파일에 사진까지 삽입해보자 !!!

엑셀에 사진을 삽입해보자.

 

src/resources/template/img에 저장해두었던 test.jpg 경로를 작성하고.

 

anchor.setRow 에는 사진이 삽입될 행을 

anchor.setCol 에는 사진이 삽입될 열을 작성해주면된다. 

 

 

▶ poiController.java 작성하기 (6) - 전체 소스는 맨 아래

 

다운로드 완료

 

작성 후 프로젝트 Run AS 를 통해 톰캣을 올리고 웹 브라우저를 실행해서

 

엑셀다운 버튼을 클릭해보자 !

 

그럼 정상적으로 엑셀이 다운로드 된다.

 

엑셀 다운로드 모습

 

자바에서 작성한대로 엑셀에 잘 담아졌다 !!!

 

 

 

▶ poiController.java 전체소스

 

poiController.java 소스코드

 

 

그 외에도 유용한 기능으로.

 

sheet.createFreezePane(2,2); // 엑셀 틀 고정: 2열 2행을 틀 고정함.

cell.setCellFormula("SUM(A5:A10)");  // 함수식을 적용한다.

sheet.setDisplayGridlines(false); // 엑셀 눈금선 제거하기

 

/* 배경색 먹이기 */

style.setFillForegroundColor(IndexedColors.TAN.getIndex());

style.setFillPattern(CellStyle.SOLID_FOREGROUND);

 

Row Col Cell 생성 개념만 이해된다면 

더 많은 데이터도 조건문이나 반복문을 통해 활용할 수 있을것같아요.

 

poi 라이브러리가 좀 난잡하긴하지만....

전체소스에서 일부분을 카피 해오면서 나눠서 돌려보는 것을 추천합니다 !!!!

 

 

 

home.jsp
0.00MB
PoiController.java
0.01MB
poiTest.xls
0.04MB

 

 

▶ 에러사항

카피 혹은 파일을 가져다썼는데도 에러가 나는 경우에는

requestMapping value와 url을 잘 맞춰보세요~

컨택스트 path 를 적용하지 않아서 생길 수 있는 에러입니다 ~!

 

[keyword]

java poi 예제, java poi 엑셀다운, spring poi 라이브러리, 스프링 poi, 스프링 엑셀 export, 스프링 엑셀다운, spring poi, poi 눈금선, poi 사진, poi 틀고정, poi 함수식, 스프링 poi 예제, 자바 poi, 자바 엑셀 export

반응형

댓글