IT정보사전

[.Net] NPOI 엑셀 다운로드 기능 사용 본문

웹 프로그래밍

[.Net] NPOI 엑셀 다운로드 기능 사용

작은나무0530 2018. 12. 12. 17:10
728x90
반응형

안녕하세요~ 작은나무입니다!!
.Net으로 DataTable 데이터를 Excel로 다운로드 받는 기능을 만들기 위해 NPOI 라이브러리를 사용하여 작성한 내용입니다.

NPOI란?
POI는 xls,doc,ppt 파일을 읽고 쓸 수 있는 오픈 소스 프로젝트 라이브러리를 말합니다.
예를 들어, Microsoft Office 제품군을 설치하지 않고 Excel보고서를 생성할 수 있습니다.
Excel 기능(Cell Style, Data 형식, 수식 등)을 대부분 사용할 수 있습니다.

어떻게 사용해야 하는지 알아 보겠습니다.
NPOI를 사용하기 위해서는 NPOI.dll 파일을 프로젝트에 포함하고 사용해야 합니다.

[소스]
using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
using NPOI.SS.Util;

//데이터 만들기(샘플)
DataTable dt = new DataTable();
dt.Columns.Add("Name", Type.GetType("System.String"));
dt.Columns.Add("Age", Type.GetType("System.String"));
dt.Columns.Add("Address", Type.GetType("System.String"));

dt.Rows.Add(new Object[] {"홍길동", "15", "서울시"});
dt.Rows.Add(new Object[] {"신사임당", "40", "경기도"});
dt.Rows.Add(new Object[] {"임꺽정", "30", 부산시"});

HSSFWrokbook workbook = new HSSFWorkbook();        //새 엑셀 파일 만들기
HSSFSheet sheet = (HSSFSheet)workbook.CreateSheet());    //새 시트 만들기
ICellStyle cellStyle = woorbook.CreateCellStyle();            //새 Cell Style 만들기

HSSFRow titleRow = (HSSFRow)sheet.CreateRow(0);    //헤더
titleRow.HeightInPoints = 20;                                 //헤더 Row Height

//셀 합치기(row, next row, cell, next cell)
CellRangeAddress cellRange = new CellRangeAddress(0, 0, 0, 0);
sheet.AddMergedRegion(cellRange);

for (int colIdx = 0; colIdx < dt.Columns.Count; colIdx++)
{
    DataColumn col = dt.Columns[colIdx];
    HSSFCell cell = (HSSFCell)hRow.CreateCell(colIdx);

    cell.SetCellValue(col.ToString());               //Cell 값 입력
    sheet.SetColumnWidth(colIdx, 3000);        //Column Width값 조절
}

HttpContext.Current.Response.ContentType = "application/vnd.ms-excel";
HttpContext.Current.Response.AddHeader("Content-Disposition", string.Format("attachment;filename={0}", "엑셀파일명.xls"));
HttpContext.Current.Response.Clear();

HttpContext.Current.Response.BinaryWrite(WriteToStream(workbook).GetBuffer());
HttpContext.Current.Response.End();

//파일 저장하는 Class
private static MemoryStream WriteToStream(HSSFWorkbook hssworkbook)
{
    MemoryStream file = new MemoryStream();
    hssworkbook.Write(file);

    return file;
}

해당 소스를 적용하고 실행하면 [엑셀파일명.xls]가 다운로드 진행되는 것을 확인 하실 수 있습니다.
만약, xlsx로 다운로드 하고 싶으시면 HSSF 부분을 XSSF로 변경하시면 가능합니다.

728x90
반응형
그리드형
Comments