Programing/JAVA

Java Excel 엑셀 다운로드 기능 구현

리커니 2014. 5. 14.
반응형

 

Java Excel 엑셀 다운로드 기능 구현

이번 포스팅은 JSP 엑셀 다운로드 기능 구현에 대해서 포스팅 하겠습니다.

그리드의 내용을 엑셀로 다운로드 하는 것은 현업 요구사항에서 거의 빠지지 않고 등장하는 것중에 하나이죠.


Spring MVC 구조에 기반하고 
엑셀로 다운로드 하길 원하는 데이터가 표현된 그리드는 존재한다는 가정하에 
기능 구현 위주로 설명하겠습니다.

(JSTL 을 이용한 테이블 만드는 방법은 아래의 Link를 참조하세요.)


우선 엑셀로 다운로드 하기 위해선 버튼이 필요하겠죠.

원하는 위치에 버튼을 생성합니다.


[JSP]


1
2
3
4
5
6
7
8
9
10
11
12
<input type="button" value=" 엑셀 다운로드 " onclick="javascript:ExcelDownload();"/>
 
<script>
function ExcelDownload() {
    var frm = document.조건부form의name;
    var 변수1 = $.trim(frm.조건1.value);
    var 변수2 = $.trim(frm.조건2.value);
    var 변수3 = $.trim(frm.조건3.value);
    location.href = "/statistics/excelDown.do?
    변수1="+변수1+"&변수2="+변수2+"&변수3="+변수3;
};
</script>
cs


 

조건부 폼의 값을 변수로 받아 저장하고 get 방식으로 매개변수를 Controller 로 넘겨줍니다.

( 조건부값에 상관없이 전체 데이터를 뽑을 경우에는 매개변수를 설정하지 않습니다.)


[Controller]

1
2
3
4
5
6
7
8
@RequestMapping(value = "/statistics/excelDown.do")
public ModelAndView StatisticsExcelList(HttpServletRequest request, HttpServletResponse response) {
 
    String 변수1 = ConvertUtil.NullToStr(request.getParameter("변수1"));
    String 변수2 = ConvertUtil.NullToStr(request.getParameter("변수2"));
    String 변수3 = ConvertUtil.NullToStr(request.getParameter("변수3"));
    // 데이터 가져오기
    Map<String, Object> map = excelDownService.getExcelDown(request, response);
cs




1
2
3
4
5
6
7
8
9
    // Model And View 생성
    //ModelAndView mav = getCommonView(type, "", "statistics.excelDown");
    
    ModelAndView mav = new ModelAndView();
 
    mav.addObject("excelDown", map);
    mav.setViewName("excelDownloadView");
    return mav;    
}
cs


 

request를 통해 변수들을 받을 필요는 없지만 가독성을 위해 작성하였습니다.

받은 변수들을 서비스로 넘겨  데이터를 가져옵니다.(점선전까지)

데이터를 가져온 후 ModelAndView 를 생성해 데이터를 담은 후 JSP 로 return 해주죠.

붉은색으로 표시한 부분이 엑셀다운로드 처리 해주는 곳입니다.

dispatcher-servlet 에서 bean을 설정해 해당 class 로 연결 해주게 됩니다.


[dispatcher-servlet]

<bean id="excelDownloadView" class="util.ExcelDownLoadFile" />




아래의 파일을 다운로드 하여 적절한 위치에 넣어주세요.

실제적으로 엑셀 다운로드가 일어나는 곳이 아래의 java 파일입니다.


ExcelDownLoadFile.java



(Spring 설정 파일에 대해서는 구글링을..)


[Service]


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
public Map getStatisticsExcelList(HttpServletRequest request, HttpServletResponse response) {
    logger.debug("service on!");
 
    String 변수1 = ConvertUtil.NullToStr(request.getParameter("변수1"));
    String 변수2 = ConvertUtil.NullToStr(request.getParameter("변수2"));
    String 변수3 = ConvertUtil.NullToStr(request.getParameter("변수3"));
 
    excelDownVO.set변수1(변수1);
    excelDownVO.set변수2(변수2);
    excelDownVO.set변수3(변수3);
 
    try { 
        Map<String, Object> map = new HashMap<String, Object>();
        List<String> colName = new ArrayList<String>();  //excel 제목행
 
        colName.add("제목1"); 
        colName.add("제목2"); 
        colName.add("제목3");
        colName.add("제목4"); 
        colName.add("제목5"); 
 
        Map<String, Object> _map = new HashMap<String, Object>();
        List<String> colValue = null;  // excel 데이터 행
 
        if((변수1 != null && 변수1 != "")){   // 키값일 경우
            // Vo에 있는 변수를 DAO로 넘겨 데이터를 가져온다.
            List<HashMap<String, Object>> resultList = excelDownDAO.getExcelDown(excelDownVO); 
            if (resultList != null && resultList.size() > 0) {
                int dataLength = Math.round(resultList.size());
                // 데이터의 로우수 만큼 반복하면서 ArrayList에 담는다.
                for(int i = 0; i < dataLength; i++){
                colValue = new ArrayList<String>();
                colValue.add(ConvertUtil.NullToStr(resultList.get(i).get("컬럼1")));
                colValue.add(ConvertUtil.NullToStr(resultList.get(i).get("컬럼2")));
                colValue.add(ConvertUtil.NullToStr(resultList.get(i).get("컬럼3")));
                colValue.add(ConvertUtil.NullToStr(resultList.get(i).get("컬럼4")));
                colValue.add(ConvertUtil.NullToStr(resultList.get(i).get("컬럼5")));
 
                _map.put("time"+i, colValue);
                colValue = null;
                }
                // 데이터를 담는 부분
                map.put("sheetName""excelDownTest");  // 시트이름
                map.put("colName", colName);                 // 제목값
                map.put("colValue", _map);     // 데이터
                map.put("excelname""excelDownTest");  // 엑셀파일명
            }
 
        }else{
            colValue.add("");
            colValue.add("");
            colValue.add("");
            colValue.add("");
            colValue.add("");
        
            _map.put("time"+1, colValue);
            map.put("sheetName""excelDownTest");
            map.put("colName", colName);
            map.put("colValue", _map); 
            map.put("excelname""excelDownTest");
        } 
        // 담은 값을 Controller로 return
        return map;
    } catch (Exception e) {
        e.printStackTrace();
        return getResultJSON( CommonRCDConstants.E00000, true );
    }    
}
cs

 

일반적으로 그리드의 데이터를 가져오는 것과 별반 다를 것이 없습니다.

데이터를 가져온 후 위의 java 파일의 class를 읽음으로써 엑셀 다운로드 이벤트가 발생하게 되는 것 입니다.

 

반응형

댓글

💲 추천 글