[java] jsp에서 엑셀 파일로 저장 방법 (한글, 워드도 가능)

java에서 html을 엑셀로 출력하는 방법은 여러 가지가 있다.(poi 등등)
오늘은 그중에서 header만  간단히 변경해 엑셀이나 한글, 워드로 출력하는 방법을 알아보자.

 

출력해 볼 HTML

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html>
<body>
<h1>office print</h1>
<table border="1" >
    <thead>
    <tr>
        <th >제목</th>
        <th >내용</th>
    </tr>
    </thead>
    <tbody>
    <c:forEach items="${list}" var="list" varStatus="status">
        <tr>
            <td>${list.title} </td>
            <td>${list.content}</td>
        </tr>
    </c:forEach>
    </tbody>
</table>
</body>
</html>

 

출력할 내용은 db에서 불러왔고 jstl을 이용해 테이블 형식으로 만들었다.
더 예쁘게 스타일을 줄 수 있지만 일단 선 구분을 하기 위해 table에 border 값 1만 추가했다.

 

문서 상단에 다운로드 선언하기

<%
    //excel
    response.setContentType("application/vnd.ms-xls;charset=EUC-KR");
    response.setHeader("Content-Disposition", "inline; filename=office_print.xls;");

%>

jsp 상단에 헤더값을 선언한다.
filename은 출력되는 파일이름이니 본인의 입맛에 맞게 변경하면 된다.
한글이 깨진다면 charset값을 변경해 주자.
charset=utf-8, charset=euc-kr
(jsp에서는 xlsx는 지원이 안되니 참고하기 바람)

 

파일은 다운로드 폴더에 바로 저장이 되는데 출력할 데이터의 형식변환이 필요하다면 스타일지정을 통해 셀 서식을 변경할 수 있다. 

출력될 파일에 셀 서식 지정

mso-number-format:"\@"
텍스트 형식변환

mso-number-format:"0"
소수점 없는 숫자형식

mso-number-format:"0\.000"
소수점 3자리까지 표기
mso-number-format:"\#\,\#\#0\.000"
숫자 자릿수 구분+ 소수점 표기

mso-number-format:"mm\/dd\/yy"
월/일/연도 형식 (08/31/23)

<td style="mso-number-format:'\@'">${list.title} </td>

보기와 같이 서식을 지정할 요소에 스타일을 넣어주면 된다.

전화 번호의 경우 숫자로 인식해 맨 앞에 0이 다 빠지는 현상이 발생할수 있는데 텍스트 형식을 지정해주면 해결된다.

 

한글과 워드 문서로 출력 방법

<%

    //word
    response.setContentType("application/vnd.word;charset=EUC-KR");
    response.setHeader("Content-Disposition", "inline; filename=office_print.doc;");

    //hwp
    response.setContentType("application/hwp;charset=EUC-KR");
    response.setHeader("Content-Disposition", "inline; filename=office_print.hwp;");

%>

엑셀 이외에도 한글이나 워드 문서로 출력이 가능하다.
방법은 ContentType과 flilename의 확장자 변경만 해주면 된다.