IronXLとNPOIの比較
ご存知のように、Excelは世界で最も使用されているスプレッドシートアプリケーションです。 ユーザーには開発者と一般人の両方が含まれますが、この記事に最も関心を持つのはおそらく開発者です。 初めは、開発者がさまざまなアプリケーションでExcelを操作するための選択肢は多くありませんでした。 しかし、Office Suiteに組み込まれたVBA(Visual Basic for Applications)を使用して、必要に応じてOffice製品を操作することができました。
開発者はVBAを使用して、Excelとそのデータ、さらにはその視覚機能との対話をカスタマイズしていました。 しかし、最終的にはそれでは不十分でした。 開発者はさらに多くを望み、Office.Interopを使用し始めました。
この記事では、Office.Interopに依存せずにExcelと連携できる2つの非常に優れたExcelライブラリを比較します。 それらは以下の通りです:
- IronXL
- NPOI
それぞれのExcelライブラリが何ができるかを見て学び、その後コード例やステップバイステップのチュートリアルを通じて2つを比較します。 この記事では両方のExcelライブラリのすべての機能をカバーすることはできませんが、それぞれの最も一般的で人気のある使用法を説明します。
C#でExcelのNPOIを使用する方法
- NPOI で Excel を読み取るための C# ライブラリをインストールする
- Excel ファイルを保存するためにXSSFWorkbookオブジェクトをインスタンス化する
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スイートをインストールせずにExcelレポートを生成する(バックグラウンドでMicrosoft Excel ActiveXを呼び出すよりも効率的)
- Officeドキュメントからテキストを抽出し、全文インデックス機能を実装するのを助ける(ほとんどの場合、この機能は検索エンジンを作成するために使用される)
- Officeドキュメントから画像を抽出します
- 数式を含むExcelシートを生成します
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のExcelライブラリの共通のライブラリ機能
| NPOI | IronXL |
|---|---|
| セル範囲 | セル範囲 |
| セルのスタイル設定(境界線、色、塗りつぶし、フォント、数値、配置) | セルの視覚スタイル: フォント、サイズ、背景パターン、境界線、配置、数値の書式。 |
| 数式計算 | 数式 |
| データバリデーション | データバリデーション |
| 条件付き書式設定 | 条件付き書式設定 |
| 画像 | 画像 |
| チャート | チャート |
表1 - 機能比較
IronXLとNPOIのインストール
両方のライブラリは手動またはNuGetでインストールできます。 ここにクイックオーバービューがあります。
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を使用してExcelファイルを読み書きする
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 SubIronXLを使用してExcelファイルを読む
以下のコードは、IronXLを使用してExcelファイルを読み取り、データグリッドビューに表示する方法を示しています。 以下のコードを追加し、名前空間を含めます:
using IronXL;
using System.Data;using IronXL;
using System.Data;Imports IronXL
Imports System.DataIronXLの導入に注意してください。 これはIronXLを機能させるために必要です。 ここでは、既存のExcel Workbookオブジェクトが読み込まれ、その後、JSONとXML形式にエクスポートされます。
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なのですか? ご覧のとおり、IronXLは使いやすいAPIを持ち、コードをきれいに保ちます。 IronXLを使用するライブラリは、理解しやすく、変更しても問題なく変更できる、クリーンで読みやすいコードを誇り、時間と労力を削減する投資です。
IronXLは、NPOIと同等に強力でありながら、直感的で使いやすいです。 そしてもちろん、ライセンスキーを使用することで、有料ソフトウェアの最も重要な利点であるプロフェッショナルサポート、信頼性のある更新スケジュール、Iron Softwareのサポートエージェントによる機能リクエストを行うことができます。 これは、オープンソースでは提供できないものです。
ダウンロード
このプロジェクトはGitHubで入手可能です:
よくある質問
C# で Excel 操作を行うための Office.Interop を使用する代替手段は何ですか?
IronXL は、C# での Excel 操作に Office.Interop を使用する代替手段です。Microsoft Office をインストールしなくても Excel ファイルを作成、読み取り、編集できるユーザーフレンドリーな API を提供します。
C# で Excel ファイルを PDF に変換するにはどうすればよいですか?
C# で Excel ファイルを PDF に変換するには、WorkBook.Load で Excel ワークブックを読み込み、その後 WorkBook.SaveAs メソッドを使用してファイルを PDF 形式で保存します。
Excel ファイル操作に IronXL を使用する主な利点は何ですか?
IronXL は、より直感的な API、プロフェッショナルなサポート、定期的な更新、Microsoft Office をインストールしなくても Excel ファイルを操作できる能力を提供し、開発者に強力な選択肢となります。
IronXL は NuGet 経由でインストールできますか?
はい、IronXL は NuGet 経由でインストールできます。Visual Studio 開発者コマンド プロンプトを開き、Install-Package IronXL.Excel -Version x.x.x を入力します。
IronXL を使用して実行できる一般的な Excel 関連のタスクは何ですか?
IronXL を使用すると、開発者は Excel ファイルの読み書き、セルのスタイル設定、数式の使用、データの検証、条件付き書式の適用、画像やチャートの操作などのタスクを実行できます。
Microsoft Office を使用せずに C# で Excel ファイルを読み取るにはどうすればよいですか?
IronXL を使用すると、WorkBook.Load でワークブックを読み込み、ワークシートにアクセスし、簡単な方法で行とセルを反復処理して、C# で Excel ファイルを読み取ることができます。
Excel 操作のためにオープンソースの代替手段ではなく IronXL を選ぶ理由は何ですか?
IronXL は、よりユーザーフレンドリーな API、プロフェッショナルなサポート、定期的な更新、および進行中の機能要求を提供しており、NPOI などのオープンソースの代替手段より優れています。
NPOI は、Excel ファイル操作において IronXL とどう違いますか?
NPOI は、Microsoft Office なしで Excel ファイルを操作するための Apache POI プロジェクトに基づくオープンソース ライブラリです。ただし、IronXL はより直感的な API、プロフェッショナルなサポート、および定期的な更新を提供しており、商用アプリケーションに適しています。
IronXL を使用して Excel ワークシートを DataTable に変換する手順は何ですか?
IronXL を使用して Excel ワークシートを DataTable に変換するには、WorkBook.Load でワークブックを読み込み、目的のワークシートにアクセスし、利用可能なメソッドを使用して DataTable に変換してさらなる処理を行います。
.NET アプリケーションで IronXL は Excel ファイル管理をどのように強化しますか?
IronXL は、クリーンで直感的な API を提供することにより、.NET アプリケーションでの Excel ファイル管理を強化し、Microsoft Office のインストールに頼ることなく、Excel ファイルの読み取り、編集、作成などのタスクを容易にします。






