IronXLとNPOIの比較
IronXLとNPOIはどちらも.NET Excelライブラリであり、Office.Interopを使用せずに動作します。つまり、Microsoft Excelのインストールは不要です。 この比較では、Excelファイルの読み書きおよび操作に関する各APIについて解説し、開発者が最も頻繁に遭遇する操作のコード例を示します。
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の比較は?
| NPOI | IronXL |
|---|---|
| セル範囲 | セル範囲 |
| セルのスタイル設定(境界線、色、塗りつぶし、フォント、数値、配置) | セルの視覚スタイル:フォント、サイズ、背景パターン、枠線、配置、数値形式。 |
| 数式計算 | 数式 |
| データバリデーション | データバリデーション |
| 条件付き書式設定 | 条件付き書式設定 |
| 画像 | 画像 |
| チャート | チャート |
表1 - 機能比較
NPOIの代替としてIronXLを評価するチームは、30日間無料トライアルでAPIをフルに試すことができます。
IronXLとNPOIのインストール
両方のライブラリは手動または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を使用して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 Sub
IronXLを使用してExcelファイルを読む
以下のコードは、IronXLを使用してExcelファイルを読み取り、データグリッドビューに表示する方法を示しています。 IronXLのコード例をもっと知りたい場合は、ドキュメントを参照してください。 以下のコードを追加し、名前空間を含めます:
using IronXL;
using System.Data;
using IronXL;
using System.Data;
Imports IronXL
Imports System.Data
IronXLの導入に注意してください。 これは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は読み込みと表示の処理をNPOIの40行以上に比べて約5行のコードに削減し、手動での行の反復処理とセルごとの抽出ループを完全に排除しています。 IronXLの全機能ガイドをご覧いただくと、一般的なExcel作業をより効率的に行うための方法が見つかります。
どちらのライブラリを選ぶべきか?
NPOIは、 .NETにおけるExcel操作のための、堅牢で実績のあるオープンソース基盤を提供します。Apache POIの移植版として開発されたため、長年にわたるコミュニティの貢献と幅広いフォーマットへの対応という恩恵を受けています。 主な要件が無料のコミュニティ主導型パッケージでスプレッドシートの読み書きを行うことであるチームにとって、NPOIは信頼できる選択肢です。
チームがしばしば摩擦に直面するのは、NPOIが一般的な操作のために必要とする定型コードの量である。 上記のファイル読み込みの例が示すように、IronXLのアプローチでは、同じ操作(ワークブックを読み込んでデータグリッドに表示する)に必要なコードが約5行であるのに対し、NPOIでは40行以上必要となり、手動での行とセルの反復処理ループが完全に不要になります。 コードの表面積が減少することは、メンテナンスの容易化やバグが潜む場所の減少という形で報われる投資である。
IronXLには、Professionalサポート、定期的なアップデートスケジュール、そしてIron Softwareのエンジニアに直接機能のリクエストができる機能も含まれています。 コミュニティ主導型プロジェクトは、この点において異なるトレードオフを提供する。すなわち、より幅広い貢献者からの意見を取り入れることができる一方で、特定の問題に対する対応時間が予測しにくくなる。
ライセンス費用以外に、プロジェクトの総費用には、NPOIの低レベルAPIに必要な追加の定型コードの作成と保守に費やされた開発者の時間、および上記の例に示した手動データマッピングロジックのデバッグに費やされた時間が含まれます。 複数年にわたるプロジェクトライフサイクル全体でコストを評価するチームにとって、これらの開発および保守コストは、オープンソースライセンスと商用ライセンスの差額をしばしば上回る。
ダウンロード
このプロジェクトはGitHubで入手可能です:
ご自身のプロジェクトでその違いを実感してみませんか? 30日間のIronXL無料トライアルを開始して、これらの例をローカルで実行してください。
よくある質問
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 ファイルの読み取り、編集、作成などのタスクを容易にします。




