반응형

1. Point

  • 엑셀 셀 병합 방법
  • 셀 병합 후 값 넣기

 

반응형

 

 

2. 전체 코드

// 참조 추가
using System.IO;
using NPOI.HSSF.Util;
using NPOI.SS.UserModel;
using NPOI.SS.Util;
using NPOI.XSSF.UserModel;

namespace manual_NPOI_excel_IO
{
    internal class Program
    {
        static void Main(string[] args)
        {
            var newFile = @"./dir/newbook.xlsx";

            using (var fs = new FileStream(newFile, FileMode.Create, FileAccess.Write))
            {

                IWorkbook workbook = new XSSFWorkbook();
                // 시트 생성
                ISheet sheet1 = workbook.CreateSheet("Sheet1");


                // 셀 병합
                //// 시작 row, 끝 row, 시작 column, 끝 column
                sheet1.AddMergedRegion(new CellRangeAddress(0, 0, 0, 10));
				
                // 병합된 셀에 값 넣기 (항상 병합된 셀 중 첫칸 기준으로 데이터를 넣어야 한다)
                sheet1.CreateRow(0).CreateCell(0).SetCellValue("Cell Merge");
                // 병합된 셀 중간에 값을 넣으면 아무값도 써지지 않는다
                sheet1.CreateRow(1).CreateCell(3).SetCellValue("Cell Merge");


                // 작업 내용 파일에 작성 및 저장
                workbook.Write(fs);
            }
        }
    }
}
반응형
반응형

1. Point

  • 셀에 엑셀 함수를 넣어 계산하기

 

 

 

반응형

 

 

 

2. 전체 코드

// 참조 추가
using System.IO;
using NPOI.HSSF.Util;
using NPOI.SS.UserModel;
using NPOI.SS.Util;
using NPOI.XSSF.UserModel;

namespace manual_NPOI_excel_IO
{
    internal class Program
    {
        static void Main(string[] args)
        {
            var newFile = @"./dir/newbook.xlsx";

            using (var fs = new FileStream(newFile, FileMode.Create, FileAccess.Write))
            {

                IWorkbook workbook = new XSSFWorkbook();

                // 시트 생성
                ISheet sheet1 = workbook.CreateSheet("Sheet1");


                // A1 ~ A11까지 0~10까지 숫자 넣기
                for (int i = 0; i < 11; i++)
                {
                    sheet1.CreateRow(i).CreateCell(0).SetCellValue(i);
                }


                // 셀에 함수 넣기
                // 엑셀에서 사용되는 함수에 앞에 '='만 빼고 넣으면 된다
                sheet1.CreateRow(11).CreateCell(0).SetCellFormula("sum(A1:A11)");


                // 작업 내용 파일에 작성 및 저장
                workbook.Write(fs);
            }
        }
    }
}
반응형
반응형

1. Point

  • 생성한 엑셀 시트의 셀에 값 넣기
  • 반복문을 이용한 셀 값넣기
  • 변수를 이용한 셀 값 넣기

 

 

반응형

 

 

2. 전체 코드

// 참조 추가
using System.IO;
using NPOI.HSSF.Util;
using NPOI.SS.UserModel;
using NPOI.SS.Util;
using NPOI.XSSF.UserModel;

namespace manual_NPOI_excel_IO
{
    internal class Program
    {
        static void Main(string[] args)
        {
            var newFile = @"./dir/newbook.core.xlsx";

            using (var fs = new FileStream(newFile, FileMode.Create, FileAccess.Write))
            {

                IWorkbook workbook = new XSSFWorkbook();
                // 시트 생성
                ISheet sheet1 = workbook.CreateSheet("Sheet1");


				// 셀에 값 넣기
                var cell_1 = sheet1.CreateRow(0).CreateCell(0);

                cell_1.SetCellValue("Cell_A0");

                for (int i = 1; i < 11; i++)
                {
                    sheet1.CreateRow(i).CreateCell(0).SetCellValue("Cell_A" + i + " (for loop)");
                }

                // 작업 내용 파일에 작성 및 저장
                workbook.Write(fs);
            }
        }
    }
}
반응형
반응형

1. Point

  • 사전 준비 : '참조 - NuGet' 에서 NPOI를 설치
  • 엑셀 파일 생성
  • 워크 시트 생성
  •  

 

반응형

 

 

2. 전체 코드

// 참조 추가
using System.IO;
using NPOI.HSSF.Util;
using NPOI.SS.UserModel;
using NPOI.SS.Util;
using NPOI.XSSF.UserModel;

namespace manual_NPOI_excel_IO
{
    internal class Program
    {
        static void Main(string[] args)
        {
            var newFile = @"./dir/newbook.core.xlsx";

            using (var fs = new FileStream(newFile, FileMode.Create, FileAccess.Write))
            {
				// 워크북 생성
                IWorkbook workbook = new XSSFWorkbook();

                // 시트 생성
                ISheet sheet1 = workbook.CreateSheet("Sheet1");

                // 작업 내용 파일에 작성 및 저장
                workbook.Write(fs);
            }
        }
    }
}
반응형
반응형

1. 사용자가 많다

내가 라이브러리 선택하는 요소 중 가장 중요한 요소이다.

사용자가 많으면 그만큼 문제가 발생했을때 쉽게 검색과 대처가 가능하다.

 

 

 

반응형

 

2. 편의성

Microsoft.Office.Interop.Excel은 안정적이지 않았다.

가장 큰 문제는 파일 작성 후 excel 프로세스가 닫히지 않는 문제점

강제로 Marshal.ReleaseComObject()로 다 닫아줘야 하는데 코드가 길어지다보면 안되는 경우가 많이 발생한다.

또한 실행된 모든 excel을 종료하다보니 보고 있던 엑셀파일마저 닫혀버린다

그 상태로 다시 코드가 실행되면 또 다른 excel 프로세스가 실행된다.

 

NPOI는 경험상 아직 이런 문제는 발생하지 않았다.

많이 쓰는 오픈소스인데 이런 이슈가 없는것을 보면 없다고 봐도 무방할듯 하다.

반응형
반응형

1. 닷넷 스프레드 라이브러리 ReoGrid

  1) ReoGrid https://reogrid.net/  

 

ReoGrid - .NET Spreadsheet Component

Excel Compatibility Loading and saving Excel format, including style, format, drawings and charts. Learn More »

reogrid.net

 

 

 

2. 특징

  1) 무료다 (MIT License)

    (1) 상업용(기업용) 무료

    (2) 기타 상세 내용 링크 https://namu.wiki/w/MIT%20%ED%97%88%EA%B0%80%EC%84%9C

 

  2) 엑셀과 유사한 형태의 UI 컨트롤이다

    (1) 엑셀과 같은 워크 시트탭 기능

    (2) 각종 함수 사용이 가능

    (3) 디테일한 세팅이 가능

3. 단점

  1) 일부 기능 지원 문제

    (1) WPF에서 DropDownList기능 사용 불가

  2) 업데이트 문제

    (1) Github에서 이슈 토론은 이어지나 업데이트 소식은 없음 

반응형

+ Recent posts