【C#エクセル】主要ライブラリ比較とコード例
C# を使用して Excel を操作するためのライブラリには、いくつかの選択肢があります。
それぞれのライブラリの特徴を紹介します。
- EPPlus(イーピープラス)
- ClosedXML(クローズドエックスエムエル)
- NPOI(エヌポイ)
- Interop(インターオペラビリティ)
EPPlus
Open Office Xml 形式の Excel ファイル (.xlsx) を読み書きするためのオープンソースライブラリです。
セル値、スタイル、チャート、画像、形状など、Excel の高度な機能をサポートしています。
パフォーマンスも良好なため、商用・非商用問わず幅広いプロジェクトで利用されています。
特徴
- 高度な Excel 機能のサポート
- パフォーマンスが良い
- .NET Standard 2.0 に対応
ClosedXML
OpenXML スプレッドシートを簡単に操作できるようにする .NET ライブラリです。
コードを簡単に読み書きし、Excel ドキュメントの生成や編集が容易になります。
フォーマット設定、スタイル、データ検証などの機能を提供しています。
特徴
- 高レベルの API を提供、使いやすい
- 広範囲な Excel 機能のサポート
- ドキュメントの作成と編集が容易
NPOI
Microsoft Office のファイル形式(Excel、Word など)を .NET 環境で操作するためのオープンソースプロジェクトです。
特に Excel の古い形式 (.xls) と新しい形式 (.xlsx) の両方をサポートしており、幅広いバージョンの Excel ファイルとの互換性を提供します。
特徴
- .xls と .xlsx 形式の両方をサポート
- 広範囲の Microsoft Office ファイル形式に対応
- コミュニティによるサポート
Interop
Microsoft が提供する COM ライブラリで、C# から Excel アプリケーションを直接操作できます。
Excel インスタンスを起動し、実際の Excel アプリケーションと同じように作業を自動化することができます。
Excel がインストールされている環境でのみ動作します。
特徴
- Excel アプリケーションの直接操作
- 高度な機能と自動化のサポート
- Excel がインストールされている環境でのみ利用可能
比較表
比較表
ライブラリ | 概要 | サポートファイル形式 | 利点 | 欠点 | 対象ユーザー | 備考 |
---|---|---|---|---|---|---|
EPPlus | .NET で Excel ファイルを操作。高度な機能サポート。 | .xlsx | ・高速なファイル操作 ・チャートや条件付き書式などの高度な機能 ・ライセンス: 商用利用に有料プランあり | ・商用プランは年間約$395から | 中級者以上の開発者 | 「直感的」は、APIの使い方が明確で理解しやすいことを指す。 |
ClosedXML | Excel ファイルの生成や編集を簡単にする。使いやすい API 提供。 | .xlsx | ・APIがシンプルで理解しやすい ・スタイル設定やデータ検証などの機能 | ・数万行を超えるデータではパフォーマンス低下の可能性 | 初心者から中級者の開発者 | 「大量のデータ」は数万行以上のデータセットを指す。 |
NPOI | 古い形式と新しい形式の Excel ファイルの両方をサポート。 | .xls, .xlsx | ・幅広いバージョンの互換性 ・複数の Office ファイル形式対応 | ・APIが複雑で学習が必要 ・ドキュメント不足 | 幅広い Excel バージョンを扱う開発者 | 「直感的でない」は、APIの理解や利用が複雑であることを指す。 |
Excel Interop | Excel アプリケーションを直接操作する COM ライブラリ。 | 依存なし | ・Excel の全機能にアクセス可能 ・複雑な自動化やマクロの実行が可能 | ・Excel のインストールが必須 ・メモリやCPUリソースを大量に消費 | 高度な Excel 操作が必要な開発者 | COM ライブラリは、Windows のコンポーネントオブジェクトモデルの略。Excel アプリケーションとプログラムが通信するための仕組み。 |
Hello World!
「Hello World!」という文字列を書き込む例です。
EPPlus
EPPlusを使ってExcelファイルに「Hello World!」という文字列を書き込む例です。
using (var package = new ExcelPackage())
{
var worksheet = package.Workbook.Worksheets.Add("Sheet1");
worksheet.Cells["A1"].Value = "Hello World!";
package.SaveAs(new FileInfo("HelloWorld.xlsx"));
}
ClosedXMLの例
ClosedXMLを使って同様にExcelファイルを作成し、「Hello World!」を書き込む例です。
using (var workbook = new XLWorkbook())
{
var worksheet = workbook.Worksheets.Add("Sample Sheet");
worksheet.Cell("A1").Value = "Hello World!";
workbook.SaveAs("HelloWorld.xlsx");
}
NPOIの例
NPOIを使用して、Excelファイルに「Hello World!」という文字列を書き込む例です。
IWorkbook workbook = new XSSFWorkbook(); // .xlsxフォーマット用
ISheet sheet = workbook.CreateSheet("Sample Sheet");
IRow row = sheet.CreateRow(0);
ICell cell = row.CreateCell(0);
cell.SetCellValue("Hello World!");
using (var fileData = new FileStream("HelloWorld.xlsx", FileMode.Create))
{
workbook.Write(fileData);
}
Excel Interop
Excel Interopを使用してExcelファイルを操作し「Hello World!」という文字列をA1セルに設定する例です。
この方法ではExcelがインストールされている必要があります。
using Excel = Microsoft.Office.Interop.Excel;
var excelApp = new Excel.Application();
excelApp.Visible = true;
Excel.Workbook workbook = excelApp.Workbooks.Add();
Excel.Worksheet worksheet = (Excel.Worksheet)workbook.Worksheets[1];
Excel.Range a1 = worksheet.Cells[1, 1];
a1.Value2 = "Hello World!";
workbook.SaveAs("HelloWorld.xlsx");
excelApp.Quit();