[Javascript] [JAVA] html 코드를 엑셀파일 형식으로 저장하기

[Javascript] [JAVA] html 코드를 엑셀파일 형식으로 저장하기

html 코드를 엑셀파일 형식으로 저장하는 방법이다.

html 코드로 테이블(table)을 그려서 엑셀파일로 저장하는 방식이다.

저장 시 파일형식은 xls 확장자다.

1. javascript(js)에서 html 코드를 엑셀파일 저장하기

먼저 자바스크립트에서 html 코드를 엑셀파일로 만드는 방법이다.

크롬 브라우저에서 html 을 띄우고 [실행] 버튼을 클릭하면 strHtml 변수 내용에 해당하는 html 코드가 fileName.xls 형식의 엑셀파일로 저장된다.

참고로 아래 코드는 IE11에서는 동작하지 않고 크롬 브라우저에서 동작한다.

test.html 내용

<!DOCTYPE html>
<html>
<head>
<meta charset=“UTF-8” />
<script>
function saveExcelFile() {
    var strHtml = “”;
    strHtml += “<html>\n”;
    
    strHtml += “<head>\n”;
    strHtml += “<meta http-equiv=\”Content-Type\” content=\”application/vnd.ms-excel; charset=utf-8\”>\n”;
    strHtml += “<meta name=ProgId content=Excel.Sheet>\n”;
    strHtml += “<meta name=Generator content=\”Microsoft Excel 11\”>\n”;
    strHtml += “<style>\n”;
    strHtml += “td, th {\n”;
    strHtml += ” border: 1px solid #000000;\n”;
    strHtml += “}\n”;
    strHtml += “</style>\n”;
    strHtml += “</head>\n”;
    
    strHtml += “<body>\n”;
    strHtml += “<table>\n”;
    strHtml += “<tr>\n”;
    strHtml += “<th style=\”background-color: #EEEEEE;\”>국어</th>\n”;
    strHtml += “<th style=\”background-color: #EEEEEE;\”>영어</th>\n”;
    strHtml += “<th style=\”background-color: #EEEEEE;\”>수학</th>\n”;
    strHtml += “</tr>\n”;
    strHtml += “<tr>\n”;
    strHtml += “<td>100점</td>\n”;
    strHtml += “<td>90점</td>\n”;
    strHtml += “<td>95점</td>\n”;
    strHtml += “</tr>\n”;
    strHtml += “</table>\n”;
    strHtml += “</body>\n”;
    
    strHtml += “</html>”;
    
    var elemA = document.createElement(“a”);
    elemA.href = URL.createObjectURL(new Blob([strHtml], {type: “application/csv;charset=utf-8;”}));
    elemA.download = “fileName.xls”;
    elemA.style.display = “none”;
    
    document.body.appendChild(elemA);
    elemA.click();
    document.body.removeChild(elemA);
}
</script>
</head>
<body>
    <input type=“button” value=“실행” onclick=“saveExcelFile();” />
</body>
</html>

2. JAVA에서 html 코드를 엑셀파일 저장하기

다음으로 자바에서 html 코드를 엑셀파일로 만드는 방법이다.

test.jsp 내용

<%@ page language=“java” pageEncoding=“UTF-8”%><%@
page contentType=“text/html; charset=UTF-8”%><%@
page import=“java.net.URLEncoder”%><%
    request.setCharacterEncoding(“utf-8”);
    response.setContentType(“application/vnd.ms-excel”);
    response.setCharacterEncoding(“utf-8”);
    
    response.setHeader(“Content-Disposition”“attachment; filename=\”” + “fileName.xls” + “\””);
    response.setHeader(“Pragma”“no-cache”);
    response.setHeader(“Cache-Control”“no-cache”);
    
    StringBuilder strHtml = new StringBuilder();
    strHtml.append(“<html>\n”);
    
    strHtml.append(“<head>\n”);
    strHtml.append(“<meta http-equiv=\”Content-Type\” content=\”application/vnd.ms-excel; charset=utf-8\”>\n”);
    strHtml.append(“<meta name=ProgId content=Excel.Sheet>\n”);
    strHtml.append(“<meta name=Generator content=\”Microsoft Excel 11\”>\n”);
    strHtml.append(“<style>\n”);
    strHtml.append(“td, th {\n”);
    strHtml.append(” border: 1px solid #000000;\n”);
    strHtml.append(“}\n”);
    strHtml.append(“</style>\n”);
    strHtml.append(“</head>\n”);
    
    strHtml.append(“<body>\n”);
    strHtml.append(“<table>\n”);
    strHtml.append(“<tr>\n”);
    strHtml.append(“<th style=\”background-color: #EEEEEE;\”>국어</th>\n”);
    strHtml.append(“<th style=\”background-color: #EEEEEE;\”>영어</th>\n”);
    strHtml.append(“<th style=\”background-color: #EEEEEE;\”>수학</th>\n”);
    strHtml.append(“</tr>\n”);
    strHtml.append(“<tr>\n”);
    strHtml.append(“<td>100점</td>\n”);
    strHtml.append(“<td>90점</td>\n”);
    strHtml.append(“<td>95점</td>\n”);
    strHtml.append(“</tr>\n”);
    strHtml.append(“</table>\n”);
    strHtml.append(“</body>\n”);
    
    strHtml.append(“</html>”);
    
    out.print(strHtml.toString());
%>

3. 결과

결과는 아래와 같이 엑셀파일이 만들어진다.

js와 자바의 차이가 있다면 js 코드는 한 줄씩 해석해서 실행하는 인터프리터 언어이므로 html 코드의 양이 많을 경우 그려내는 속도가 다소 느릴 수 있다.

 

4. 제약사항

제약사항으로는 (1) 디자인적 제약사항과 (2) 확장자 제약사항(xlsx 확장자 불가능)이 있다.

예를 들어 테두리 선을 적용할 때 border를 1px solid #000000; 로 그려내도 엑셀에서 직접 적용할 때처럼 얇게 표시되지 않는다.

만약 xls 확장자가 아닌 xlsx 확장자를 사용하고 싶거나, 디테일하게 디자인을 적용하고 싶다면 자바 POI 라이브러리를 찾아보는 것을 권장한다.