java - 엑셀 업로드,다운로드 구현(poi)

개미는뚠뚠·2023년 4월 29일
0

java

목록 보기
7/11
post-thumbnail

프로젝트를 진행하다가 엑셀 업로드 기능과 다운로드 기능을 추가 요청이 있었다. 자바로 개발 경험이 부족했던 나는 이걸 어떻게 만들지...하면서 구글링을 했었다. 근데 많은 사람들이 poi 라는 라이브러리를 통하여 개발을 진행한 예시가 있었다. 사실 많은 글을 봤지만 솔직히 이해를 하지 못했었다. 하지만 노력은 배신하지 않았다...꾸준히 콘솔에 결과값들을 하나씩 찍어가며 나는 엑셀 업로드 기능과 다운로드 기능을 구현하였다. 이번 글에서는 내가 작성한 예시를 간단히 정리해보려고 한다.

일단 그 전에 poi에 대해 간단한 설명부터...

poi란?

공식사이트 : http://poi.apache.org/download.html
개요 : 아파치 소프트웨어 재단에서 만든 라이브러리로 마이크로소프트 오피스 파일을 자바 언어로 읽고 쓰는 기능을 제공한다.

  • 워드, 엑셀, 파워포인트 등을 지원한다
  • 최근 오피스 포맷인 Office Open XML File Formats (OOXML, 즉 xml 기반의 .docx, xlsx, *.pptx, .. 등) 지원 파일 포맷을 늘려가고 있다.

주요 클래스

  • HSSF : 엑셀 97 ~ 2003 버전, 65535 라인까지 사용가능
  • XSSF : 엑셀 2007 버전 이상, 65535 라인 이상 사용 가능
  • SXSSF : XSSF의 Streaming Version으로 메모리를 적게 사용, 65535 라인 이상 사용 가능

다음은 내가 실제 프로젝트에서 적용한 방법을 공유하려고 한다. 내용은 다음과 같다.

엑셀 업로드 / 다운로드

먼저 다운로드 기능이 간단하니 먼저 설명을 진행하겠다.

view

다운로드 기능은 view에서는 정말 간단하다. 다음과 같이 다운로드 버튼 태그에 함수를 하나 달아주었다. 해당 함수에는 controller로 url을 매핑시키는 동작만 처리한다. 이걸로 view에서 다운로드 처리는 끝났다.

pom.xml

컨트롤러에서 poi를 활용하려면 다음과 같이 pom.xml에 작성해야한다.

controller

내가 컨트롤러에서 처리해준 로직은 다음과 같다. 이번엔 vo를 사용하지도 않았고, 모든게 컨트롤러 안에서 처리가 되었다. 컨트롤러 내에 파일 경로 및 파일명, 파일 사이즈 등등 여러가지를 다음과 같이 정의해주면 된다. 코드에 불필요한 내용들이 조금 보이지만 가볍게,,,무시,,,

다음은 업로드 기능이다.

view

업로드 기능을 구현하려면 일단 input 태그에 file속성으로 태그를 작성해줘야 한다. 내 코드 같은 경우에는 조금 복잡하게 짜여있는데 input파일 태그는 원래 css가 적용이 안 먹어서 label을 통해 커스텀 했다. 그래서 뭔가 조금 복잡하게 보일 것이다. 암턴 중요한건 input type=file과 전체를 묶어주고 있는 form 태그이다.

인풋태그에 파일 선택을 누르고 "확인" 버튼을 누르면 아래 코드에 있는 함수가 실행된다. 해당 함수는 client가 선택한 엑셀 파일을 form-data로 보내주는 ajax 요청이다.

controller

간단히 설명하자면 먼저 client에서 받은 form-data를 MultipartHttpServletRequest로 받아준다. 이후 서버 내에서 파일을 열고 Sheet를 분석한다.

Sheet분석이 끝났으면 반복문을 통해 행-> 행 안에 셀들을 순회한다. 그리고 해당 정보들을 map으로 각 컬럼의 key:value형태로 저장하고 db로 넘겨주기 위하여 List에 담았다.

솔직히 이후 db에 insert해주는 부분도 구현하려고 했는데 잠깐 다른 기능을 먼저 구현해야해서 바빴다...그냥 위에서 List에 저장한 데이터를 vo에 담고 model에 넘겨 insert해주면 된다! 그냥...그렇다구....

솔직히 poi에 대해 자세한 설명은 없었지만 이 블로그는 나만의 일기장 같은 느낌이기 떄문에 나만 알아볼 수 있으면 된다. 이상으로 poi를 통한 업로드 및 다운로드 기능을 마치겠다👍

0개의 댓글