728x90
반응형

 jsp 파일에 있는 표나 글씨 등을 엑셀 혹은 워드 파일로 다운로드/실행하는 방법이다.



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
<!-- 엑셀 -->
<%@ page language="java" contentType="application/vnd.ms-excel;charset=UTF-8" pageEncoding="UTF-8"%>
 
<!-- 워드 -->
<%-- <%@ page language="java" contentType="application/vnd.word;charset=UTF-8" pageEncoding="UTF-8"%> --%>
 
<!-- 한글 -->
<%-- <%@ page language="java" contentType="application/hwp;charset=UTF-8" pageEncoding="UTF-8"%> --%>
 
<%
 
//******************************MS excel******************************
    // MS excel로 다운로드/실행, filename에 저장될 파일명을 적어준다.
    response.setHeader("Content-Disposition","attachment;filename=member.xls");
    response.setHeader("Content-Description", "JSP Generated Data");
     
    // ↓ 이걸 풀어주면 열기/저장 선택창이 뜨는 게 아니라 그냥 바로 저장된다.
//  response.setContentType("application/vnd.ms-excel");
//*********************************************************************
 
 
//******************************MS word********************************
    // MS word로 다운로드/실행, filename에 저장될 파일명을 적어준다.
//  response.setHeader("Content-Disposition", "attachment;filename=member.doc");
//  response.setHeader("Content-Description", "JSP Generated Data");
     
    // ↓ 이걸 풀어주면 열기/저장 선택창이 뜨는 게 아니라 그냥 바로 저장된다.
//  response.setContentType("application/vnd.ms-word");
//*********************************************************************
     
     
//******************************한글(hwp)********************************
    // 한글(hwp)로 다운로드/실행, filename에 저장될 파일명을 적어준다.
//  response.setHeader("Content-Disposition", "attachment;filename=member.hwp");
//  response.setHeader("Content-Description", "JSP Generated Data");
     
    // ↓ 이걸 풀어주면 열기/저장 선택창이 뜨는 게 아니라 그냥 바로 저장된다.
//  response.setContentType("application/hwp");
//*********************************************************************
 
%>

   먼저 jsp의 맨 윗 부분에 위의 코드를 적어준다.


   워드나 한글로 다운로드/실행하고 싶다면 엑셀에 맞춰져 있던 코드들을 주석으로 묶고, 기존에 주석으로 묶여있는 코드들을 풀어주면 된다.




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
<h3>회원 목록</h3>
 
    <table border="1">
        <thead>
            <tr>
                <th>ID</th>
                <th>이름</th>
                <th>전화번호</th>
            </tr>
        </thead>
         
        <tbody>
            <tr>
                <td>patriot2</td>
                <td>유관순</td>
                <td style='mso-number-format: "@";'>0431234567</td>
            </tr>
            <tr>
                <td>pitcher</td>
                <td>류현진</td>
                <td style='mso-number-format: "@";'>01034567890</td>
            </tr>
            <tr>
                <td>historian</td>
                <td>신채호</td>
                <td>001886123456</td>
            </tr>
        </tbody>
    </table>

   body 영역에는 엑셀로 다운로드/열기 할 내용을 적어준다.


   센스가 있는 사람이라면 DB와 연동해서 사용할 수 있을 것이다.




jsp 파일을 실행해서 다운로드 혹은 실행했을 때의 모습이다.




   유관순, 류현진의 경우에는 전화번호를 입력한 td 태그에 style로 mso-number-format을 텍스트 형식으로 지정해줬기 때문에 숫자 "0"이 텍스트 방식으로 온전히 표시된다. 만약 신채호의 전화번호처럼 별 다른 서식을 지정하지 않는다면 숫자 "0"이 없어져서 보일 것이다.


   mso-number-format을 알아내는 방법은 다운받은 엑셀 파일의 셀 서식을 원하는 표시형식으로 설정해준 다음 html로 저장 후 코드를 보는 것이다.


   mso-number-format에 관한 것은, 

http://cosicimiento.blogspot.kr/2008/11/styling-excel-cells-with-mso-number.html 참고.




   하지만 이 방법에는 단점이 있다.




   이게 저장 방식 때문에 xls 파일을 실행할 때에 경고창이 뜬다.

   (아마도 html형식의 파일을 확장자 xls를 붙여서 엑셀로 억지로(?) 저장하는 방식인듯...)


   다운로드 후 파일을 열 때마다 경고창이 떠서 참 귀찮다.




   이럴 땐 한 가지 임시방편이 있다.


   파일을 "다른 이름으로 저장"해서 파일 형식을 "Excel 통합 문서"로 지정한 후 저장하면, 그 파일을 다시 실행했을 때 경고창이 뜨지 않는다.


   하지만 이건 어디까지나 임시방편일 뿐, 맨 처음 다운로드 했을 때 뜨는 경고창을 해결하진 못한다.


   뭔가 방법이 있을 법도 한데, 아무리 뒤져봐도 별 다른 방법이 보이지 않는다.


   다행히 워드나 한글로 다운로드/실행 했을 때는 위와 같은 문제가 발생하지 않는다. 이유는 모르겠다.





↑ 워드로 실행 모습




한글로 실행하면 문자 코드를 선택하라고 나온다.

jsp파일 쪽에서 charset으로 지정했던 것을 선택하고 확인을 누르면 된다.




↑ 한글로 실행 모습

표의 칸 간격은 jsp의 table 태그에서 수정하면 된다.





   html을 지원하는 프로그램이라면 contentType과 header값만 알맞게 변경하면 모두 이처럼 다운로드/실행 가능하다.


   그럼 html을 지원하는지 안하는지는 어떻게 알아내나?




   간단하다.


   저장하기에 들어가서 파일 형식 중에 html이 있는지 찾아보면 된다.


   긴가민가 하면 해보면 되고..


   그냥 막 이것저것 해보는 게 최고다. ㅋㅋ






   참고한 곳 ☞ http://blog.daum.net/_blog/BlogTypeView.do?blogid=0QPBp&articleno=243

728x90
반응형
블로그 이미지

nineDeveloper

안녕하세요 현직 개발자 입니다 ~ 빠르게 변화하는 세상에 뒤쳐지지 않도록 우리모두 열심히 공부합시다 ~! 개발공부는 넘나 재미있는 것~!

,