フッターコンテンツにスキップ
他のコンポーネントと比較する
NPOI 対 IronXL の比較

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ライブラリのすべての機能をカバーすることはできませんが、それぞれの最も一般的で人気のある使用法を説明します。

class="hsg-featured-snippet">

NPOIをC#でExcelに使用する方法

  1. NPOIでExcelを読み取るためのC#ライブラリをインストールします
  2. Excelファイルを格納するためにXSSFWorkbookオブジェクトをインスタンス化します
  3. GetSheetAtメソッドを使用して特定のワークシートを取得します
  4. 行インデックスをGetRowメソッドに渡して各行にアクセスします
  5. 行内の各セルに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
セル範囲 セル範囲
セルのスタイリング(ボーダー、カラー、フィル、フォント、番号、配置) セルビジュアルスタイル フォント、サイズ、背景パターン、ボーダー、配置、番号形式。
数式計算 数式
データ検証 データ検証
条件付き書式 条件付き書式
画像 画像
グラフ グラフ

class="content__image-caption">表1 - 機能比較


IronXLとNPOIのインストール

両方のライブラリは手動でダウンロードするか、NuGetまたはVisual StudioのNuGetパッケージマネージャを介してインストールできます。 ここにクイックオーバービューがあります。

NPOIのインストール

NuGetを使用してNPOIをインストールする

NuGetを通じてNPOIをインストールするには、Visual Studio開発者コマンドプロンプトを開いて以下を入力します:

Install-Package NPOI -Version x.x.x
class="content-img-align-center"> グラフィカルユーザーインターフェース自動生成された説明

class="content__image-caption">図1 - NuGet NPOIインストール

Visual Studio NuGetパッケージマネージャとNPOI

Visual StudioのNuGetパッケージマネージャを介してIronXLまたはNPOIをインストールするために次の手順を使用します:

  • ソリューションエクスプローラでプロジェクトを右クリックします
  • NuGetパッケージの管理を選択します
  • パッケージを検索します
  • インストールをクリックします
class="content-img-align-center"> 自動生成された説明のあるコンピュータのスクリーンショット

class="content__image-caption">図2 - NPOIのNuGetパッケージマネージャ

IronXLのインストール

IronXLのダウンロード

To download IronXL, navigate to the following URL and click the "Download" button.

class="content-img-align-center"> IronXLをダウンロードする

class="content__image-caption">図3 - IronXLをダウンロード

NuGetを使用してIronXLをインストールする

NuGetを介してIronXLをインストールするには、Visual Studioの開発者コマンドプロンプトを開いて以下を入力します:

Install-Package IronXL.Excel -Version x.x.x
class="content-img-align-center"> NuGet IronXLインストール

class="content__image-caption">図4 - NuGet IronXLインストール

Visual Studio NuGetパッケージマネージャとIronXL

Visual StudioのNuGetパッケージマネージャを介してIronXLをインストールするために次の手順を使用します:

  • ソリューションエクスプローラでプロジェクトを右クリックします
  • NuGetパッケージの管理を選択します
  • パッケージを検索します
  • インストールをクリックします
class="content-img-align-center"> 自動生成された説明のあるコンピュータのスクリーンショット

class="content__image-caption">図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
$vbLabelText   $csharpLabel

以下のコードは、既存の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
$vbLabelText   $csharpLabel

IronXLを使用してExcelファイルを読む

以下のコードは、IronXLを使用してExcelファイルを読み取り、データグリッドビューに表示する方法を示しています。 以下のコードを追加し、名前空間を含めます:

using IronXL;
using System.Data;
using IronXL;
using System.Data;
Imports IronXL
Imports System.Data
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

ご覧の通り、これだけで多くの作業を削減できます。

結論

では、なぜIronXLなのですか? ご覧のとおり、IronXLは使いやすいAPIを持ち、コードをきれいに保ちます。 IronXLを使用するライブラリは、理解しやすく、変更しても問題なく変更できる、クリーンで読みやすいコードを誇り、時間と労力を削減する投資です。

IronXLは、NPOIと同等に強力でありながら、直感的で使いやすいです。 そしてもちろん、ライセンスキーを使用することで、有料ソフトウェアの最も重要な利点であるプロフェッショナルサポート、信頼性のある更新スケジュール、Iron Softwareのサポートエージェントによる機能リクエストを行うことができます。 これは、オープンソースでは提供できないものです。

ダウンロード

このプロジェクトはGitHubで入手可能です:

IronXL対NPOIの例

ご注意NPOIはその所有者の登録商標です。 このサイトは、NPOIと提携、承認、またはスポンサーされていません。 すべての製品名、ロゴ、およびブランドは各所有者の所有物です。 比較は情報提供のみを目的としており、執筆時点で公開されている情報を反映しています。

よくある質問

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 ファイルの読み取り、編集、作成などのタスクを容易にします。

Curtis Chau
テクニカルライター

Curtis Chauは、カールトン大学でコンピュータサイエンスの学士号を取得し、Node.js、TypeScript、JavaScript、およびReactに精通したフロントエンド開発を専門としています。直感的で美しいユーザーインターフェースを作成することに情熱を持ち、Curtisは現代のフレームワークを用いた開発や、構造の良い視覚的に魅力的なマニュアルの作成を楽しんでいます。

開発以外にも、CurtisはIoT(Internet of Things)への強い関心を持ち、ハードウェアとソフトウェアの統合方法を模索しています。余暇には、ゲームをしたりDiscordボットを作成したりして、技術に対する愛情と創造性を組み合わせています。