ライブ環境でテストする
ウォーターマークなしで本番環境でテストしてください。
必要な場所でいつでも動作します。
ご存知かもしれませんが、Excelはおそらく世界で最も使用されているスプレッドシートアプリケーションです。 ユーザーには開発者と一般の人々の両方が含まれますが、本記事により関心を持つのはおそらく開発者でしょう。 最初、開発者がさまざまなアプリケーションでExcelを扱うための選択肢はあまり多くありませんでした。 しかし、VBAがありました。(アプリケーション用ビジュアルベーシック)オフィススイートに組み込まれているため、ニーズに応じて任意のオフィス製品を操作することができます。
開発者はExcel内でVBAを使用して、Excelおよびそのデータとの対話、さらには視覚機能をカスタマイズしていました。 しかし、最終的にはこれでは不十分でした。 開発者たちはもっと多くを望み、Office.Interopの使用を始めました。
この記事では、Excelで作業するためにOffice.Interopに依存しない2つの非常に優れたExcelライブラリを比較します。 それらは:
IronXL
NPOI: NPOI
各Excelライブラリが何をできるかを確認し学習し、その後、コード例とステップバイステップのチュートリアルを通じて二者を比較します。 この記事では、両方のExcelライブラリのすべての機能を網羅することはできませんが、それぞれの最も一般的で人気のある使用方法について説明します。
GetSheetAt(ゲットシートアット)
メソッド行を取得
メソッドGetCell (セル取得)
メソッドNPOIは、POI Javaプロジェクトの.NETバージョンです。 http://poi.apache.org/. POIは、xls、doc、pptファイルの読み書きを支援するオープンソースプロジェクトです。 幅広い用途があります。
例えば、次のような用途に使用できます:
NPOIは、C#のポートです POI Java Apacheプロジェクト。 それは無料でオープンソースです。 また、Interopを必要としないため、ユーザーは開発者のアプリが動作するためにExcelをインストールする必要がありません。
IronXLは、VBおよびC#用のExcel APIです。 IronXLを使用すると、.NETでExcelスプレッドシートファイルを読み取り、編集し、作成することができます。
NPOI | IronXL |
---|---|
セル範囲 | セル範囲 |
セルのスタイリング(ボーダー、カラー、フィル、フォント、ナンバー、アライメント) | セルのビジュアルスタイル フォント、サイズ、背景パターン、ボーダー、配置、および数値形式。 |
数式計算 | 数式 |
データ検証 | データ検証 |
条件付き書式設定 | 条件付き書式設定 |
画像 | 画像 |
チャート | チャート |
両方のライブラリを手動で、NuGet 経由で、または Visual Studio の NuGet Package Manager を使用してインストールすることができます。 こちらは概要です。
NPOIをNuGet経由でインストールするには、Visual Studio開発者コマンドプロンプトを開いて次のコマンドを入力してください:
以下の手順に従って、Visual StudioのNuGetパッケージマネージャーを使用してIronXLまたはNPOIをインストールします。
IronXLをダウンロードするには、次のリンクに移動してください。 URL 「ダウンロード」ボタンをクリックしてください。
NuGet を通じて IronXL をインストールするには、Visual Studio の開発者コマンドプロンプトを開いて、次のコマンドを入力してください:
以下の手順に従って、Visual Studio の NuGet パッケージ マネージャーを使用して IronXL をインストールします:
以下のコードは、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
以下のコードは既存の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
以下のコードは、IronXLを使用してExcelファイルを読み取り、データグリッドビュー内に表示する方法を示しています。 以下のコードを追加して、名前空間を含めます:
using IronXL;
using IronXL;
Imports IronXL
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
ご覧の通り、これにより作業量が大幅に減ります。
なぜIronXLなのか? ご覧のとおり、IronXLには使いやすいAPIがあり、コードをすっきりと保ちます。 IronXLを利用するライブラリは、理解しやすいクリーンなコードを実現することで、その後の変更による深刻な問題を避けつつ、コードを理解するための時間と労力を削減するというメリットを享受します。
IronXLは、NPOIと同じくらい強力でありながら、全体的により直感的です。 もちろん、ライセンスキーを取得すれば、有料ソフトウェアの最も重要な利点にアクセスできます。プロフェッショナルなサポートを受けることができ、一貫性のある信頼できるアップデートスケジュールを利用できるほか、Iron Softwareのサポートエージェントに機能リクエストを行うことができ、喜んでお手伝いいたします。 これはオープンソースでは提供できないものです。
このプロジェクトはGitHubで利用できます: IronXL vs NPOI の例
9つの .NET API製品 オフィス文書用