본문 바로가기
프로그래밍/WEB

Asp.Net 간단히 엑셀파일 익스포트 하기

by zoo10 2014. 10. 23.

웹에서 엑셀 다운로드 하는 건 생각만 해도 아찔하다.

그 HTML 마크업을 다 코딩하려면 으~~

그래서 이렇게 저렇게 궁리를 해보았다.

일단 IE를 제외한 솔루션은 아래 링크를 통해 확인해 보면 간단히 구현할 수 있다.

http://www.jquerybyexample.net/2012/10/export-table-data-to-excel-using-jquery.html

와~~ 박수쳐 드리자.

그런데 중간에 IE는 안된다고 나온다.

아래 추가로 IE용으로 구현방법이 설명되어 있어서 구현했더니 잘 되더라~

일단

test.aspx 쪽 소스를 구현한다.

---------------- test.aspx --------------------------------------

<input type="hidden" id="hdnData" runat="server" />
<div id="grid">
<table>
    <tr><td>111</td><td>222</td><td>333</td></tr>
    <tr><td>111</td><td>222</td><td>333</td></tr>
    <tr><td>111</td><td>222</td><td>333</td></tr>
</table>
</div>

<asp:Button ID="excelDown" OnClientClick="excelClick();" runat="server" OnClick="excelDown_Click" Text="엑셀" />

<script>
function excelClick() {
        var tblHTML = $('#div_grid').html();
        tblHTML = escape(tblHTML);
        $('#ctl00_ContentPlaceHolder1_hdnData').val(tblHTML);
}
</script>


위처럼 적당히 각자의 소스에 추가한다. 아래는 cs 쪽 소스이다.

-------------------------- test.aspx.cs ---------------------------------

어쩌구 저쩌구....

    #region 엑셀 다운로드
    /// <summary>
    /// 엑셀 다운로드
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void excelDown_Click(object sender, EventArgs e)
    {
        string file_name = DateTime.Now.ToString("yyyyMMddhhmmss") + "_다운로드.xls";
        //한글깨짐으로 인코딩
        file_name = HttpUtility.UrlEncode(file_name, System.Text.Encoding.UTF8).Replace("+", "%20"); 

        string data = hdnData.Value;
        data = HttpUtility.UrlDecode(data);
        Response.Clear();
        Response.AddHeader("content-disposition", "attachment;filename=" + file_name);
        Response.Charset = "";
        Response.ContentType = "application/excel";
        HttpContext.Current.Response.Write(data);
        HttpContext.Current.Response.Flush();
        HttpContext.Current.Response.End();
    }
    #endregion


소스는 끝이다. 화면에 있는데로 엑셀로 다운로드할 수 있다. 

사실 jQuery는 사용하지 않아도 된다.


아참, 이건 실제로는 엑셀이 아니고 엑셀에서 보이는 html인건 다들 아시죠?

피드백 주세요~