본문 바로가기
.Net

C# NPOI를 이용한 엑셀 생성

by Dokon Jang 2021. 2. 9.
반응형

자바에서는 아파치의 POI 라이브러리로 엑셀, 워드 등을 유용하게 사용하고 있습니다.

C#에서는 NPOI(.NET POI 인듯..)를 활용하여 엑셀, 워드 등을 생성, 변경 할 수 있습니다.

C#에서 MS Office COM 을 이용하여 엑셀 리포트를 작업했는데 클라이언트 환경에 따라 작동이 안되는 경우가 많았습니다.

NPOI를 이용하면 클라이언트의 환경(MS 오피스 버전 등) 문제는 자유로워집니다.

 

1. NPOI 라이브러리를 설치하기 위해서 참조의 팝업메뉴에서 NeGet 패키지 관리를 클릭합니다.

 

2. NeGet에서 NPOI를 검색하고 설치합니다.

 

3. NPOI이가 설치되면 아래와 같이 참조에 추가됩니다.

 

4. 간단한 예제입니다.

using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
using System;
using System.IO;

namespace PoiExcel
{
    class Program
    {
        static void Main(string[] args)
        {
            // Workbook 생성
            XSSFWorkbook workbook = new XSSFWorkbook();

            // Sheet 생성
            ISheet sheet = workbook.CreateSheet("시트1");

            // 헤더 Row 생성
            string[] header = {"아이디", "이름", "나이"};
            IRow hRow = sheet.CreateRow(0);
            for (int i = 0; i < header.Length; i++)
            {
                ICell hCell = hRow.CreateCell(i);
                hCell.SetCellValue(header[i]);
            }

            // 데이터 Row 생성
            object[,] datas = {
                {"ID-001", "김아무개", 20},
                {"ID-002", "이아무개", 15},
                {"ID-002", "홍아무개", 31},
            };
            for(int i = 0; i < datas.GetLength(0); i++)
            {
                // 엑셀에 Row 생성
                IRow dRow = sheet.CreateRow(i + 1);

                for(int j = 0; j < datas.GetLength(1); j++)
                {
                    object value = datas[i, j];
                    ICell dCell = dRow.CreateCell(j);
                    
                    // 값의 Type(double, bool, DateTime, string)별 CELL에 지정
                    if(value is double)
                    {
                        dCell.SetCellValue((double)value);
                    }
                    else if(value is bool)
                    {
                        dCell.SetCellValue((bool)value);
                    }
                    else if(value is DateTime)
                    {
                        dCell.SetCellValue((DateTime)value);
                    }
                    else
                    {
                        dCell.SetCellValue(value.ToString());
                    }
                }
            }

            // 엑셀 파일 저장
            string excelFilePath = @"d:\temp\excel.xlsx";
            using (FileStream fs = new FileStream(excelFilePath, FileMode.Create, FileAccess.Write))
            {
                workbook.Write(fs);
            }
        }
    }
}

 

5. 위의 예제를 실행한 결과입니다.

 

반응형

댓글