他のコンポーネントと比較

IronXLとNPOIの比較 IronXLとNPOIは、開発者がExcelファイルを操作するために使用する2つの人気のあるライブラリです。それぞれのライブラリには、異なる機能と利点があります。 IronXLは、.NETフレームワークに対応する強力なExcelライブラリであり、開発者がExcelファイルを簡単に読み込み、操作し、保存できるようにします。IronXLは、高度なフォーマット機能、強力なデータ操作、そして高パフォーマンスなエンジンを提供します。このライブラリは商用ライセンスされており、企業向けに最適です。 一方、NPOIはオープンソースのExcelライブラリであり、無料で使用できます。NPOIは、基本的な読み込みと書き込み機能を提供し、広くコミュニティでサポートされています。しかし、高度な機能や商用サポートを必要とする企業には、IronXLの方が適している場合があります。 総じて、IronXLはその高機能と商用サポートによって、企業向けのプロフェッショナルな解決策として優れています。一方で、NPOIはコスト意識の高いプロジェクトや基本的なExcel操作を必要とする開発者にとって十分な選択肢です。

リーガン・パン
リーガン・パン
2021年12月1日
共有:

ご存知かもしれませんが、Excelはおそらく世界で最も使用されているスプレッドシートアプリケーションです。 ユーザーには開発者と一般の人々の両方が含まれますが、本記事により関心を持つのはおそらく開発者でしょう。 最初、開発者がさまざまなアプリケーションでExcelを扱うための選択肢はあまり多くありませんでした。 しかし、Office SuiteにはVBA(Visual Basic for Applications)が組み込まれており、これを使用して必要に応じて任意のOffice製品を操作することができました。

開発者はExcel内でVBAを使用して、Excelおよびそのデータとの対話、さらには視覚機能をカスタマイズしていました。 しかし、最終的にはこれでは不十分でした。 開発者たちはもっと多くを望み、Office.Interopの使用を始めました。

この記事では、Excelで作業するためにOffice.Interopに依存しない2つの非常に優れたExcelライブラリを比較します。 それらは:

  • IronXL
  • NPOI

    各Excelライブラリが何をできるかを確認し学習し、その後、コード例とステップバイステップのチュートリアルを通じて二者を比較します。 この記事では、両方のExcelライブラリのすべての機能を網羅することはできませんが、それぞれの最も一般的で人気のある使用方法について説明します。

NPOIとは何ですか?

NPOIは、[http://poi.apache.org/](http://poi.apache.org/" target="_blank" rel="nofollow)のPOI Javaプロジェクトの.NETバージョンです。 POIは、xls、doc、pptファイルの読み書きを支援するオープンソースプロジェクトです。 幅広い用途があります。

例えば、次のような用途に使用できます:

  • Microsoft OfficeスイートをサーバーにインストールせずにExcelレポートを生成し、バックグラウンドでMicrosoft Excel ActiveXを呼び出すよりも効率的です。
  • Officeドキュメントからテキストを抽出して、全文インデックス機能を実装するのを支援します(この機能は大抵、検索エンジンを作成するために使用されます)。
  • オフィス文書から画像を抽出する
  • 数式を含むExcelシートを生成する

NPOIとExcel

NPOIは、Apacheによる[POI Java](http://poi.apache.org/" target="_blank" rel="nofollow)プロジェクトのC#ポートです。 それは無料でオープンソースです。 また、Interopを必要としないため、ユーザーは開発者のアプリが動作するためにExcelをインストールする必要がありません。

IronXLとエクセル

IronXLは、VBおよびC#用のExcel APIです。 IronXLを使用すると、.NETでExcelスプレッドシートファイルを読み取り、編集し、作成することができます。

NPOIおよびIronXL Excelライブラリの共通ライブラリ機能

NPOI IronXL
Cell Ranges Cell Ranges
Cell styling (Border, Color, Fill, Font, Number, Alignments) Cell visual styles Font, Size, Background pattern, Border, Alignment and Number formats.
Formula calculation Formulas
Data Validation Data Validation
Conditional formatting Conditional formatting
Images Images
Charts Charts

表 1 - 機能比較


IronXLとNPOIのインストール

両方のライブラリを手動で、NuGet 経由で、または Visual Studio の NuGet Package Manager を使用してインストールすることができます。 こちらは概要です。

NPOI インストール

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

NPOIをNuGet経由でインストールするには、Visual Studio開発者コマンドプロンプトを開いて次のコマンドを入力してください:

グラフィカルユーザーインターフェイスの説明が自動生成されました。

図1 - NuGet NPOIインストール

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

以下の手順に従って、Visual StudioのNuGetパッケージマネージャーを使用してIronXLまたはNPOIをインストールします。

  • ソリューションエクスプローラーでプロジェクトを右クリックします。
  • NuGet パッケージの管理を選択
  • パッケージを選択する
  • インストールをクリック
    自動生成されたコンピュータのスクリーンショットの説明

    図2 - NPOIのためのNuGetパッケージマネージャー

IronXL のインストール

IronXLのダウンロード

IronXLをダウンロードするには、次のURLに移動し、「ダウンロード」ボタンをクリックしてください。

IronXLをダウンロード

図 3 - IronXL のダウンロード

NuGetを使用したIronXLのインストール

NuGet を通じて IronXL をインストールするには、Visual Studio の開発者コマンドプロンプトを開いて、次のコマンドを入力してください:

NuGet IronXL インストール

図 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 NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
Imports NPOI.SS.UserModel
Imports NPOI.XSSF.UserModel
$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";
            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;

                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());
                    }
                }
                for (int i = (objWorksheet.FirstRowNum + 1); i <= objWorksheet.LastRowNum; i++)
                {
                    IRow objRow = objWorksheet.GetRow(i);
                    if (objRow == null) continue;
                    if (objRow.Cells.All(d => d.CellType == CellType.Blank)) continue;
                    for (int j = objRow.FirstCellNum; j < countCells; j++)
                    {
                        if (objRow.GetCell(j) != null)
                        {
                            if (!string.IsNullOrEmpty(objRow.GetCell(j).ToString()) && !string.IsNullOrWhiteSpace(objRow.GetCell(j).ToString()))
                            {
                                lstRows.Add(objRow.GetCell(j).ToString());
                            }
                        }
                    }

                    if (lstRows.Count > 0)
                        dtTable.Rows.Add(lstRows.ToArray());
                    lstRows.Clear();
                }
            }
            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";
            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;

                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());
                    }
                }
                for (int i = (objWorksheet.FirstRowNum + 1); i <= objWorksheet.LastRowNum; i++)
                {
                    IRow objRow = objWorksheet.GetRow(i);
                    if (objRow == null) continue;
                    if (objRow.Cells.All(d => d.CellType == CellType.Blank)) continue;
                    for (int j = objRow.FirstCellNum; j < countCells; j++)
                    {
                        if (objRow.GetCell(j) != null)
                        {
                            if (!string.IsNullOrEmpty(objRow.GetCell(j).ToString()) && !string.IsNullOrWhiteSpace(objRow.GetCell(j).ToString()))
                            {
                                lstRows.Add(objRow.GetCell(j).ToString());
                            }
                        }
                    }

                    if (lstRows.Count > 0)
                        dtTable.Rows.Add(lstRows.ToArray());
                    lstRows.Clear();
                }
            }
            dataGridView1.DataSource = dtTable;
        }
        private void button1_Click(object sender, EventArgs e)
        {
            ReadExcelNPOI();
        }
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

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

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

using IronXL;
using IronXL;
Imports IronXL
$vbLabelText   $csharpLabel

IronXLの含まれていることに注意してください。 これはIronXLが動作するために必要です。 次の数行を追加してください:

        private void button2_Click(object sender, EventArgs e)
        {
            string strPath = @"c:\temp\NPOI_Test.XLSX";
            WorkBook workbook = WorkBook.Load(strPath);
            WorkSheet sheet = workbook.DefaultWorkSheet;
            var dtTable = sheet.ToDataTable(true);
            dataGridView1.DataSource = dtTable;
        }
        private void button2_Click(object sender, EventArgs e)
        {
            string strPath = @"c:\temp\NPOI_Test.XLSX";
            WorkBook workbook = WorkBook.Load(strPath);
            WorkSheet sheet = workbook.DefaultWorkSheet;
            var dtTable = sheet.ToDataTable(true);
            dataGridView1.DataSource = dtTable;
        }
Private Sub button2_Click(ByVal sender As Object, ByVal e As EventArgs)
			Dim strPath As String = "c:\temp\NPOI_Test.XLSX"
			Dim workbook As WorkBook = WorkBook.Load(strPath)
			Dim sheet As WorkSheet = workbook.DefaultWorkSheet
			Dim dtTable = sheet.ToDataTable(True)
			dataGridView1.DataSource = dtTable
End Sub
$vbLabelText   $csharpLabel

ご覧の通り、これにより作業量が大幅に減ります。

結論

なぜIronXLなのか? ご覧のとおり、IronXLには使いやすいAPIがあり、コードをすっきりと保ちます。 IronXLを利用するライブラリは、理解しやすいクリーンなコードを実現することで、その後の変更による深刻な問題を避けつつ、コードを理解するための時間と労力を削減するというメリットを享受します。

IronXLは、NPOIと同じくらい強力でありながら、全体的により直感的です。 もちろん、ライセンスキーを取得すれば、有料ソフトウェアの最も重要な利点にアクセスできます。プロフェッショナルなサポートを受けることができ、一貫性のある信頼できるアップデートスケジュールを利用できるほか、Iron Softwareのサポートエージェントに機能リクエストを行うことができ、喜んでお手伝いいたします。 これはオープンソースでは提供できないものです。

ダウンロード

このプロジェクトはGitHubで利用できます: IronXL vs NPOI の例

リーガン・パン
ソフトウェアエンジニア
レーガンはリーディング大学で電子工学の学士号を取得しました。Iron Softwareに入社する前の仕事では、一つのタスクに集中して取り組んでいました。Iron Softwareでは、営業、技術サポート、製品開発、マーケティングのいずれにおいても広範な業務に携わることが最も楽しいと感じています。彼は、Iron Softwareライブラリを開発者がどのように使用しているかを理解し、その知識を使ってドキュメントを継続的に改善し、製品を開発することを楽しんでいます。
< 以前
IronXLとCsvHelperの比較
次へ >
IronXLとAspose Cellsの比較