IronXL 과 NPOI 비교
IronXL 과 NPOI는 모두 Office.Interop 없이 작동하는 .NET Excel 라이브러리입니다. 즉, Microsoft Excel을 설치할 필요가 없습니다. 이 비교에서는 Excel 파일을 읽고 쓰고 조작하는 데 사용되는 API를 다루며, 개발자가 가장 자주 접하는 작업에 대한 코드 예제를 제공합니다.
C#에서 NPOI를 사용하여 Excel 다루기
- NPOI로 Excel을 읽을 수 있는 C# 라이브러리 설치
- XSSFWorkbook 객체를 인스턴스화하여 Excel 파일을 저장
GetSheetAt메서드를 사용하여 특정 워크시트를 가져옵니다- 행 인덱스를
GetRow메서드로 전달하여 각 행에 접근합니다 GetCell메서드를 사용하여 행의 각 셀에 접근합니다
NPOI란 무엇인가?
NPOI is the .NET version of the POI Java project at http://poi.apache.org/. POI는 xls, doc, ppt 파일을 읽고 쓸 수 있도록 도와주는 오픈 소스 프로젝트입니다. 이 프로젝트는 매우 다양한 응용 프로그램에서 사용할 수 있습니다.
예를 들어, 다음과 같은 작업에 사용할 수 있습니다:
- 서버에 Microsoft Office Suite가 설치되어 있지 않더라도 Microsoft Excel ActiveX를 백그라운드에서 호출하는 것보다 더 효율적으로 Excel 보고서를 생성
- Office 문서에서 텍스트를 추출하여 전체 텍스트 인덱싱 기능을 구현하는 데 도움(대부분 검색 엔진을 만들기 위해 사용됨)
- Office 문서에서 이미지를 추출
- 수식이 포함된 엑셀 시트를 생성합니다.
NPOI와 Excel
NPOI is a C# port of the POI Java project by Apache. 무료이며 오픈 소스입니다. 또한 Interop이 필요 없으며, 사용자가 Excel을 설치하지 않아도 개발자 앱이 작동합니다.
IronXL과 Excel
IronXL은 VB와 C#용 Excel API입니다. IronXL을 사용하면 .NET에서 Excel 스프레드시트 파일을 읽고, 수정하고, 생성할 수 있습니다.
NPOI와 IronXL 차이점은 무엇인가요?
| NPOI | IronXL |
|---|---|
| 세포 범위 | 세포 범위 |
| 셀 스타일링(테두리, 색상, 채우기, 글꼴, 숫자, 정렬) | 셀의 시각적 스타일에는 글꼴, 크기, 배경 패턴, 테두리, 정렬 및 숫자 서식이 포함됩니다. |
| 공식 계산 | 방식 |
| 데이터 유효성 검사 | 데이터 유효성 검사 |
| 조건부 서식 | 조건부 서식 |
| 이미지 | 이미지 |
| 차트 | 차트 |
표 1 - 기능 비교
IronXL을 NPOI 대안으로 평가하는 팀은 30일 무료 평가판으로 전체 API를 테스트할 수 있습니다.
IronXL 및 NPOI의 설치
이 두 라이브러리는 수동으로 다운로드하거나, NuGet을 통해 또는 Visual Studio의 NuGet 패키지 관리자를 통해 설치할 수 있습니다. 간략한 개요는 다음과 같습니다. 단계별 안내를 보려면 IronXL 시작 가이드를 참조하십시오.
NPOI 설치
NuGet으로 NPOI 설치
NuGet을 통해 NPOI를 설치하려면, Visual Studio 개발자 명령 프롬프트를 열고 다음을 입력하십시오:
Install-Package NPOI -Version x.x.x
그림 1 - NuGet NPOI 설치
Visual Studio NuGet 패키지 관리자와 NPOI
Visual Studio의 NuGet 패키지 관리자를 통해 IronXL 또는 NPOI를 설치하는 단계는 다음과 같습니다:
- 솔루션 탐색기에서 프로젝트를 마우스 오른쪽 버튼으로 클릭하십시오
- NuGet 패키지 관리 선택
- 패키지 검색
- 설치 클릭
그림 2 - NPOI용 NuGet 패키지 관리자
IronXL 설치
IronXL 다운로드
To download IronXL, navigate to the following URL and click the "Download" button.
그림 3 - IronXL 다운로드
NuGet으로 IronXL 설치
NuGet을 통해 IronXL을 설치하려면 Visual Studio 개발자 명령 프롬프트를 열고 다음을 입력하십시오:
Install-Package IronXL.Excel -Version x.x.x
그림 4 - NuGet IronXL 설치
Visual Studio NuGet 패키지 관리자와 IronXL
Visual Studio의 NuGet 패키지 관리자를 통해 IronXL을 설치하는 단계는 다음과 같습니다:
- 솔루션 탐색기에서 프로젝트를 마우스 오른쪽 버튼으로 클릭하십시오
- NuGet 패키지 관리 선택
- 패키지 검색
- 설치 클릭
그림 5 - IronXL용 NuGet 패키지 관리자
NPOI와 IronXL 이용한 엑셀 파일 읽기 및 쓰기
NPOI로 Excel 파일 읽기
다음 코드는 NPOI를 사용하여 Excel 파일을 읽고 그 내용을 표시하는 방법을 보여줍니다. 다음 코드를 추가하고 필요한 네임스페이스를 포함하십시오:
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
using System.Data;
using System.IO;
using System.Collections.Generic;
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
using System.Data;
using System.IO;
using System.Collections.Generic;
Imports NPOI.SS.UserModel
Imports NPOI.XSSF.UserModel
Imports System.Data
Imports System.IO
Imports System.Collections.Generic
아래 코드는 기존 Excel 파일을 읽고 데이터 그리드 뷰에 표시합니다.
public void ReadExcelNPOI()
{
DataTable dtTable = new DataTable();
List<string> lstRows = new List<string>();
ISheet objWorksheet;
string strPath = @"c:\temp\NPOI_Test.XLSX";
// Use FileStream to open the Excel file
using (var fStream = new FileStream(strPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
fStream.Position = 0;
XSSFWorkbook objWorkbook = new XSSFWorkbook(fStream);
objWorksheet = objWorkbook.GetSheetAt(0);
IRow objHeader = objWorksheet.GetRow(0);
int countCells = objHeader.LastCellNum;
// Add columns to the DataTable based on the header row of Excel
for (int j = 0; j < countCells; j++)
{
ICell objCell = objHeader.GetCell(j);
if (objCell == null || string.IsNullOrWhiteSpace(objCell.ToString())) continue;
{
dtTable.Columns.Add(objCell.ToString());
}
}
// Add rows to the DataTable, looping through each row and cell
for (int i = (objWorksheet.FirstRowNum + 1); i <= objWorksheet.LastRowNum; i++)
{
IRow objRow = objWorksheet.GetRow(i);
if (objRow == null || objRow.Cells.All(d => d.CellType == CellType.Blank)) continue;
for (int j = objRow.FirstCellNum; j < countCells; j++)
{
ICell cell = objRow.GetCell(j);
if (cell != null && !string.IsNullOrEmpty(cell.ToString()) && !string.IsNullOrWhiteSpace(cell.ToString()))
{
lstRows.Add(cell.ToString());
}
}
if (lstRows.Count > 0)
dtTable.Rows.Add(lstRows.ToArray());
lstRows.Clear();
}
}
// Assuming dataGridView1 is a DataGridView control on a Form
dataGridView1.DataSource = dtTable;
}
private void button1_Click(object sender, EventArgs e)
{
ReadExcelNPOI();
}
public void ReadExcelNPOI()
{
DataTable dtTable = new DataTable();
List<string> lstRows = new List<string>();
ISheet objWorksheet;
string strPath = @"c:\temp\NPOI_Test.XLSX";
// Use FileStream to open the Excel file
using (var fStream = new FileStream(strPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
fStream.Position = 0;
XSSFWorkbook objWorkbook = new XSSFWorkbook(fStream);
objWorksheet = objWorkbook.GetSheetAt(0);
IRow objHeader = objWorksheet.GetRow(0);
int countCells = objHeader.LastCellNum;
// Add columns to the DataTable based on the header row of Excel
for (int j = 0; j < countCells; j++)
{
ICell objCell = objHeader.GetCell(j);
if (objCell == null || string.IsNullOrWhiteSpace(objCell.ToString())) continue;
{
dtTable.Columns.Add(objCell.ToString());
}
}
// Add rows to the DataTable, looping through each row and cell
for (int i = (objWorksheet.FirstRowNum + 1); i <= objWorksheet.LastRowNum; i++)
{
IRow objRow = objWorksheet.GetRow(i);
if (objRow == null || objRow.Cells.All(d => d.CellType == CellType.Blank)) continue;
for (int j = objRow.FirstCellNum; j < countCells; j++)
{
ICell cell = objRow.GetCell(j);
if (cell != null && !string.IsNullOrEmpty(cell.ToString()) && !string.IsNullOrWhiteSpace(cell.ToString()))
{
lstRows.Add(cell.ToString());
}
}
if (lstRows.Count > 0)
dtTable.Rows.Add(lstRows.ToArray());
lstRows.Clear();
}
}
// Assuming dataGridView1 is a DataGridView control on a Form
dataGridView1.DataSource = dtTable;
}
private void button1_Click(object sender, EventArgs e)
{
ReadExcelNPOI();
}
Public Sub ReadExcelNPOI()
Dim dtTable As New DataTable()
Dim lstRows As New List(Of String)()
Dim objWorksheet As ISheet
Dim strPath As String = "c:\temp\NPOI_Test.XLSX"
' Use FileStream to open the Excel file
Using fStream = New FileStream(strPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)
fStream.Position = 0
Dim objWorkbook As New XSSFWorkbook(fStream)
objWorksheet = objWorkbook.GetSheetAt(0)
Dim objHeader As IRow = objWorksheet.GetRow(0)
Dim countCells As Integer = objHeader.LastCellNum
' Add columns to the DataTable based on the header row of Excel
For j As Integer = 0 To countCells - 1
Dim objCell As ICell = objHeader.GetCell(j)
If objCell Is Nothing OrElse String.IsNullOrWhiteSpace(DirectCast(objCell, Object).ToString()) Then
Continue For
End If
If True Then
dtTable.Columns.Add(DirectCast(objCell, Object).ToString())
End If
Next j
' Add rows to the DataTable, looping through each row and cell
For i As Integer = (objWorksheet.FirstRowNum + 1) To objWorksheet.LastRowNum
Dim objRow As IRow = objWorksheet.GetRow(i)
If objRow Is Nothing OrElse objRow.Cells.All(Function(d) d.CellType = CellType.Blank) Then
Continue For
End If
For j As Integer = objRow.FirstCellNum To countCells - 1
Dim cell As ICell = objRow.GetCell(j)
If cell IsNot Nothing AndAlso Not String.IsNullOrEmpty(DirectCast(cell, Object).ToString()) AndAlso Not String.IsNullOrWhiteSpace(DirectCast(cell, Object).ToString()) Then
lstRows.Add(DirectCast(cell, Object).ToString())
End If
Next j
If lstRows.Count > 0 Then
dtTable.Rows.Add(lstRows.ToArray())
End If
lstRows.Clear()
Next i
End Using
' Assuming dataGridView1 is a DataGridView control on a Form
dataGridView1.DataSource = dtTable
End Sub
Private Sub button1_Click(ByVal sender As Object, ByVal e As EventArgs)
ReadExcelNPOI()
End Sub
IronXL로 Excel 파일 읽기
다음 코드는 IronXL을 사용하여 Excel 파일을 읽고 데이터 그리드 뷰에 표시하는 방법을 보여줍니다. IronXL 코드 예제를 더 보려면 설명서를 참조하세요. 다음 코드를 추가하고 네임스페이스를 포함하십시오:
using IronXL;
using System.Data;
using IronXL;
using System.Data;
Imports IronXL
Imports System.Data
IronXL의 포함을 주목하십시오. 이는 IronXL이 작동하기 위해 필요합니다. 다음 몇 줄을 추가하세요:
private void button2_Click(object sender, EventArgs e)
{
// Load the Excel workbook
string strPath = @"c:\temp\NPOI_Test.XLSX";
WorkBook workbook = WorkBook.Load(strPath);
// Access the default worksheet
WorkSheet sheet = workbook.DefaultWorkSheet;
// Convert the worksheet to a DataTable
var dtTable = sheet.ToDataTable(true);
// Assuming dataGridView1 is a DataGridView control on a Form
dataGridView1.DataSource = dtTable;
}
private void button2_Click(object sender, EventArgs e)
{
// Load the Excel workbook
string strPath = @"c:\temp\NPOI_Test.XLSX";
WorkBook workbook = WorkBook.Load(strPath);
// Access the default worksheet
WorkSheet sheet = workbook.DefaultWorkSheet;
// Convert the worksheet to a DataTable
var dtTable = sheet.ToDataTable(true);
// Assuming dataGridView1 is a DataGridView control on a Form
dataGridView1.DataSource = dtTable;
}
Private Sub button2_Click(ByVal sender As Object, ByVal e As EventArgs)
' Load the Excel workbook
Dim strPath As String = "c:\temp\NPOI_Test.XLSX"
Dim workbook As WorkBook = WorkBook.Load(strPath)
' Access the default worksheet
Dim sheet As WorkSheet = workbook.DefaultWorkSheet
' Convert the worksheet to a DataTable
Dim dtTable = sheet.ToDataTable(True)
' Assuming dataGridView1 is a DataGridView control on a Form
dataGridView1.DataSource = dtTable
End Sub
보시다시피, IronXL NPOI의 40줄 이상에 비해 읽기 및 표시 작업을 약 5줄의 코드로 줄여 수동 행 반복 및 셀별 추출 루프를 완전히 없앴습니다. IronXL 의 모든 기능 가이드를 살펴보면 일반적인 Excel 작업에 대한 더욱 효율적인 접근 방식을 확인할 수 있습니다.
어떤 라이브러리를 선택해야 합니까?
NPOI는 .NET 환경에서 Excel 파일을 조작하기 위한 견고하고 잘 구축된 오픈 소스 기반을 제공합니다. Apache POI를 .NET으로 포팅한 덕분에 수년간의 커뮤니티 기여와 광범위한 형식 지원이라는 이점을 누리고 있습니다. 스프레드시트를 읽고 쓰는 것이 주된 요구 사항인 팀에게 무료 커뮤니티 기반 소프트웨어 패키지인 NPOI는 믿을 수 있는 선택입니다.
팀들이 흔히 마찰을 겪는 부분은 NPOI가 일반적인 작업을 위해 요구하는 상용구 코드의 양입니다. 위의 파일 읽기 예시에서 알 수 있듯이, IronXL의 접근 방식은 동일한 작업(워크북을 로드하고 데이터 그리드에 표시하는 작업)에 약 5줄의 코드만 필요한 반면, NPOI는 40줄 이상의 코드가 필요하며, 수동으로 행과 셀을 반복하는 루프를 완전히 제거합니다. 코드 표면적 감소는 유지 관리를 더 쉽게 하고 버그가 숨을 곳을 줄여주기 때문에 결과적으로 투자 가치가 있습니다.
IronXL Professional 지원, 꾸준한 업데이트 일정, 그리고 Iron Software 엔지니어에게 직접 기능 요청을 할 수 있는 기능이 포함되어 있습니다. 커뮤니티 주도 프로젝트는 이와 관련하여 여러 가지 장단점을 제공합니다. 더 폭넓은 참여를 유도할 수 있지만, 특정 문제에 대한 대응 시간은 예측하기 어렵습니다.
라이선스 비용 외에도 총 프로젝트 비용에는 NPOI의 하위 수준 API에 필요한 추가적인 기본 코드를 작성하고 유지 관리하는 데 소요된 개발자 시간과 위 예시에 나와 있는 수동 데이터 매핑 로직을 디버깅하는 데 소요된 시간이 포함됩니다. 수년에 걸친 프로젝트 수명 주기 동안 비용을 평가하는 팀의 경우, 이러한 개발 및 유지 관리 비용이 오픈 소스 라이선스와 상용 라이선스 간의 차이를 훨씬 능가하는 경우가 많습니다.
다운로드
이 프로젝트는 GitHub에서 사용할 수 있습니다:
여러분의 프로젝트에서 그 차이를 직접 확인하고 싶으신가요? 30일 무료 IronXL 평가판 시작하기에서 이러한 예제를 로컬에서 실행해 보세요.
[{i:(NPOI는 해당 소유자의 등록 상표입니다. 이 사이트는 NPOI와 제휴, 인증, 후원이 없습니다. 모든 제품명, 로고 및 브랜드는 해당 소유자의 자산입니다. 비교는 정보 제공 목적으로만 사용되며, 작성 시점에 공개적으로 이용 가능한 정보를 반영합니다.
자주 묻는 질문
C#에서 Excel 파일을 조작하기 위해 Office.Interop을 사용하는 것 외에 다른 대안은 무엇일까요?
IronXL C#에서 Excel 파일을 조작할 때 Office.Interop을 사용하는 대신 사용할 수 있는 대안입니다. 개발자가 Microsoft Office를 설치하지 않고도 Excel 파일을 생성, 읽기 및 편집할 수 있도록 사용자 친화적인 API를 제공합니다.
C#에서 Excel 파일을 PDF로 변환하는 방법은 무엇인가요?
IronXL 사용하면 WorkBook.Load 메서드를 통해 Excel 통합 문서를 불러온 다음 WorkBook.SaveAs 메서드를 사용하여 파일을 PDF 형식으로 저장함으로써 C#에서 Excel 파일을 PDF로 변환할 수 있습니다.
IronXL 사용하여 Excel 파일을 조작할 때 얻을 수 있는 주요 이점은 무엇입니까?
IronXL 보다 직관적인 API를 제공하여 코드 유지 관리를 용이하게 하고, 전문적인 지원, 정기적인 업데이트, 그리고 Microsoft Office가 설치되어 있지 않아도 Excel 파일을 처리할 수 있는 기능을 제공하므로 개발자에게 강력한 선택지가 됩니다.
IronXL NuGet 통해 설치할 수 있나요?
예, IronXL NuGet 통해 설치할 수 있습니다. Visual Studio 개발자 명령 프롬프트를 열고 Install-Package IronXL.Excel -Version xxx 를 입력하세요.
IronXL 사용하여 수행할 수 있는 일반적인 Excel 관련 작업에는 어떤 것들이 있습니까?
IronXL 사용하면 개발자는 Excel 파일 읽기 및 쓰기, 셀 스타일 지정, 수식 사용, 데이터 유효성 검사, 조건부 서식 적용, 이미지 및 차트 작업과 같은 작업을 수행할 수 있습니다.
Microsoft Office 없이 C#에서 Excel 파일을 읽는 방법은 무엇인가요?
IronXL 사용하면 WorkBook.Load 사용하여 통합 문서를 로드하고, 워크시트에 접근하고, 간단한 메서드를 사용하여 행과 셀을 반복함으로써 C#에서 Excel 파일을 읽을 수 있습니다.
엑셀 파일 조작을 위해 오픈소스 대안 대신 IronXL 선택해야 하는 이유는 무엇일까요?
IronXL NPOI와 같은 오픈 소스 대안에 비해 사용자 친화적인 API, 전문적인 지원, 정기적인 업데이트 및 지속적인 기능 요청을 제공한다는 장점이 있습니다.
NPOI는 Excel 파일 조작에 있어 IronXL 과 어떻게 다른가요?
NPOI는 Microsoft Office 없이 Excel 파일을 처리하기 위한 Apache POI 프로젝트 기반의 오픈 소스 라이브러리입니다. 하지만 IronXL 보다 직관적인 API, 전문적인 지원, 그리고 정기적인 업데이트를 제공하여 상업용 애플리케이션에 더 적합합니다.
IronXL 사용하여 Excel 워크시트를 DataTable로 변환하는 과정은 무엇입니까?
IronXL 사용하여 Excel 워크시트를 DataTable로 변환하려면 WorkBook.Load 사용하여 통합 문서를 로드하고, 원하는 워크시트에 접근한 다음, 제공되는 메서드를 사용하여 해당 워크시트를 DataTable로 변환하여 추가로 사용할 수 있습니다.
IronXL .NET 애플리케이션에서 Excel 파일 관리를 어떻게 향상시킬 수 있을까요?
IronXL 깔끔하고 직관적인 API를 제공하여 .NET 애플리케이션에서 Excel 파일 관리를 향상시키며, Microsoft Office 설치 없이도 Excel 파일 읽기, 편집 및 생성과 같은 작업을 쉽게 수행할 수 있도록 지원합니다.



