본문 바로가기
프로그래밍/JAVA, .NET, 기타

[닷넷] C# RenderControl 함수로 엑셀 내려받기 기능 구현

by Joy [바가지] 2017. 9. 19.

.NET  C#에서 엑셀 내려받기

 


닷넷 C# gridView를 가장 간단하게 엑셀 내력받기 할 수 있는 방법 중 하나는 RenderControl() 함수를 사용하는 것입니다.

GridView 내용 위에 타이틀까지 추가하여 두개의 GridView의 내용을 엑셀파일로 내려 받는 기능을 구현 해 보도록하겠습니다.

소스 내에 주석으로 설명을 드리도록 하겠습니다.

using System.IO;

 

#region 엑셀 내려받기 버튼 클릭

protected void ibtnExcel_Click(object sender, ImageClickEventArgs e)

{

    string strTitle = "파일 명.xls"; //파일명을 설정 합니다.

   

    Response.Clear(); //Response를 깨끗하게 비워 줍니다. 즉, 클라이언트로의 응답 내용을 지워 줍니다.

   

    // 처음 설정하는 부분은 Response.AddHeader 부분입니다 AddHeader 함수를 통해 Response헤더 부분에

    // 문서의 제목을 설정 하게 됩니다.

    // 참고Tip : Replace("+", "%20") 는 파일 명이 공백일 때 UrlEncode 을 하면 + 로 변환되기 때문이죠

    Response.AddHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(strTitle).Replace("+", "%20"));

   

    // ContentType을 설정해 줍니다. 당연히 excel로 설정합니다

    Response.ContentType = "application/vnd.ms-excel";

 

    //한글이 정상적으로 표시 되도록 인코딩을 UTF-8로 설정 합니다.

    Response.ContentEncoding = System.Text.Encoding.GetEncoding("UTF-8");

 

    //StringWriter형으로 stringWriter를 생성, 생성한 stringWriter를 넘겨 HtmlTextWriter형으로

    //htmlWriter을 생성하였습니다. 

    StringWriter stringWriter = new StringWriter();

    HtmlTextWriter htmlWriter = new HtmlTextWriter(stringWriter);

 

    //엑셀에서 자동으로 숫자로 변환하는 것을 금지하도록 조치 합니다.

    string strStyle = @"<style>td { mso-number-format:\@; } </style>";

   

    //그리드뷰1 타이틀을 넣습니다.
    htmlWriter.Write("▒ 그리드뷰1 내용 타이틀을 넣어 봤습니다.");

   

    //그리드뷰1의 내용을 htmlWriter에 담아 줍니다.

    grdView1.RenderControl(htmlWriter);

   

    //그리드 사이에 두줄 띄울려고 넣어 보았습니다

    htmlWriter.Write("<br /><br />");

   

    htmlWriter.Write("▒ 그리드뷰2 내용 타이틀을 넣어 봤습니다. "); // 그리드뷰2 타이틀을 넣습니다.

    grdView2.RenderControl(htmlWriter); //그리드뷰2의 내용을 htmlWriter에 담아 줍니다.

   

    //strStyle 내용과, 타이틀과 그리드 내용을 담은 stringWriter을 Respose.Write 해 줍니다

    Response.Write(strStyle);

    Response.Write(stringWriter.ToString());

   

    //Response를 종료 해주면 엑셀 내려받기가 됩니다.

    Response.End();

}

#endregion

 


여기까지 RenderControl 함수를 이용하여 엑셀 내려받기를 구현 해 보았습니다

반응형

댓글0