관리 메뉴

I LOVE EJ

Web(ASP, JSP, HTML)에서 엑셀 다운로드 - 세번째Web(ASP,JSP 등) 본문

Web Development/JSP

Web(ASP, JSP, HTML)에서 엑셀 다운로드 - 세번째Web(ASP,JSP 등)

BeOne 2008. 11. 17. 11:10

Web(ASP, JSP, HTML)에서 엑셀 다운로드의 첫번째 글에서는 엑셀로 저장하기 위한 설정에 대해 정리했다.
두번째 글에서는 엑셀의 테이블과 같은 데이터를 보여주는 공간에 디자인을 넣는 방법에 대해 정리하였다.

마지막 세번째 글에서는 데이터 자체를 원하는 형태로 보여주기 위한 부분을 추가하고자 한다.
아래의 SQL문을 보면 사번, 이름, 나이, 지역 정보를 가져오도록 되어있다.
일반적으로 이것을 웹에 보여주면 전혀 문제가 없는데, 엑셀에 넣으면 문제가 되는 경우가 있다.
대표적인 경우가 숫자의 앞에 0이 붙는 경우이다.
사번의 경우를 보면, 사번은 6자리의 숫자로 되어있고 그 예가 아래와 같다고 가정할 때,
        123456 / 055333 / 222333 / 008899 / ...
웹에서는 위와 같이 보이겠지만, 엑셀에 저 값을 넣으면,
        123456 / 55333 / 222333 / 8899 / ...
위와 같이 왜곡되어 보이게 된다. 즉 숫자는 앞에 0이 올 수 없기 때문이다.
이럴때 일반적으로 엑셀에서는 [셀 서식]이라는 것을 사용하게 된다.
Web에서 엑셀로 저장할 때, 이것을 설정하기 위한 키워드가 mso-number-format 이다.
아래의 예제에서 보면 첫번째 값(i=0)일 때, style='mso-number-format:000000' 라고 설정하여,
총 6자리의 숫자를 보여줄 수 있도록 하였다.

<%
   Dim Location
   Location = Request.Form("Location")
 
'/// 조회 데이터 가져오기
   
SQL =       " SELECT NO AS 사번, NAME AS 이름, AGE AS 나이, LOCATION AS 지역 "
   SQL = SQL & " FROM MEMBERS WHERE LOCATION = '" & Location & "' "
   Rs.Open SQL, dbCon

   Response.Buffer = True
   Response.ContentType = "application/vnd.ms-excel"
 
 Response.CacheControl = "public"
   Response.AddHeader "Content-Disposition","attachment;filename=사용자관리.xls"

%>
<html>
<head><title>Excel</title>
<meta http-equiv="Content-Type" content="text/html; charset=euc-kr" /></head>
<body>
<%
 Response.Write "<table border=1 cellpadding=4>"
 Response
.Write "<tr>"
 Response.Write "<td colspan='" & Rs.Fields.Count & "' style='font-size:18px;text-align:center;height:40px;'><b> 사용자 관리 </b></td>"
 Response.Write "</tr>"
 Response.Write "<tr>"
 For i = 0 To Rs.Fields.Count - 1
  Response.Write "<td style='background:#FFBBC0;text-align:center;'><b>" & Rs(i).Name & "</b></td>"
 
Next
 Response.Write "</tr>"


 Do While Not Rs.EOF
  Response.Write "<tr>"
  For i = 0 To Rs.Fields.Count - 1
   If i = 0 Then  '// 서식 변환 : 최대 6자리(사번 앞에 0 붙이기)
    Response.Write "<td align='center' style='mso-number-format:000000
'>" & Rs(i) & " </td>"
   Else  
    Response.Write "<td align='center'>" & Rs(i) & " </td>"
   End If
  Next
  Response.Write "</tr>"
  Rs.MoveNext
 Loop
 Response.Write "</table>"
%>
</body>
</html>