안녕하세요~ 작은나무입니다!!
.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로 변경하시면 가능합니다.
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 카카오페이
- 코로그열매
- 윈도우10
- MSSQL
- 오크 현상금 퀘스트
- 카카오톡
- 코로그수집
- 토스
- Intellij
- docker
- 야생의숨결
- PostgreSQL
- AWS
- 오크 전쟁의 서막
- dbeaver
- 애플워치
- 닌텐도스위치
- 닌텐도
- 블소레볼루션
- AWS EC2
- 코로그지도
- 블소
- 젤다의전설
- 야숨
- rest api
- ubuntu
- 아이폰
- 서울STAX
- 애드센스
- java웹서버구축
Archives
- Today
- Total
IT정보사전
[.Net] NPOI 엑셀 다운로드 기능 사용 본문
728x90
반응형
728x90
반응형
그리드형
Comments