EPPlus vs ClosedXML 処理速度・概要比較

記事イメージ

エクセルをC#で操作できるライブラリはいくつかありますが、代表的なものとしてEPPlusとClosedXMLを挙げることが出来ます。

操作方法としては類似している2つのライブラリですが、パフォーマンスやライセンス等、相違点は意識しておく必要があります。本記事ではその差に着目して解説します。

尚、ClosedXMLについては、関連記事(ClosedXMLまとめ)に概要・操作一覧を掲載しております。

ライセンス:EPPlusは5.X以降は商用有償ライセンス。ClosedXMLはMITライセンス。

EPPlus及びClosedXMLはいずれもオープンソースのライブラリです。ライセンス方針は異なりますので、必ずご確認の上ご利用ください。

EPPlus:5.X系以降、商用使用において有料ライセンス

EPPlusは4.X系以前はLGPLライセンス、EPPlus5.X以降は商用は有償ライセンスです。アマチュア・研究用等では引き続き無償で利用できます。

尚、4.X系以前は引き続きLGPLライセンスで提供されることが公式サイトに掲示されています。(2022/4/25時点)

4.X系以前はサポートが終了しています。実装に組み込む場合は注意が必要です。

ClosedXML:MITライセンス

ClosedXMLはMITライセンスで提供されています。

MITライセンスは著作権表示等の条件下で商用利用可のライセンスです。ClosedXML自体のライセンスも必ず確認しましょう。

処理速度:セル読み書きはEPPlusが1.5~2倍程度早い

エクセルファイル処理において量が多く負荷がかかるセル読み書きについて、処理速度を比べてみました。

結果としては、セル読み書きはEPPlusが1.5~2倍程度早い結果を得られました。

尚、検証に用いたバージョンは、次の通りです。

  • EPPlus:4.5.3.3
  • ClosedXML:0.95.4

実験結果は以下の通りです。System.Diagnostics.Stopwatchクラスで読み書き部分の所要時間を測定しています。検証コードはこちら(ページ内リンク)に掲示しています。

表:処理速度実測の差(読み書きそれぞれ100万回実行)
EPPlus
(a)
ClosedXML
(b)
倍率
(b/a)
セル書き込み 804ミリ秒 1659ミリ秒 2.06
セル読み込み 374ミリ秒 584ミリ秒 1.56

EPPlus、Closedxmlでできること・できないこと

基本的にはエクセルで利用可能な操作はいずれも一通り組み込まれていますが、若干できる・できない点が存在します。研究中ですが、現状次の通り確認しています。(不可の項目も解決方法が存在する可能性はあります。)

EPPlus ClosedXML
パスワード付きエクセルファイルの開閉 可能 不可

尚パスワード付きエクセルファイルは、EPPlusでは以下のコードで開くことが出来ます。ExcelPackageクラスのコンストラクタの第2引数でパスワードを指定します。

C#
//EPPlusによるパスワード付きファイルのオープン
var inputExcelFile = new FileInfo(@"C:\Users\sakai\Desktop\test.xlsx");
using var wb = new ExcelPackage(inputExcelFile, "password").Workbook;

ここで言うパスワード付きエクセルファイルは、ファイルを開く際に以下のようなダイアログを表示させて保護されているファイルをさします。
ここで言うパスワード付きエクセルファイルは、ファイルを開く際に以下のようなダイアログを表示させて保護されているファイルをさします

(参考)速度測定に使用したコード

書き込み測定用コードのみ記載します。読み込みに関しては、書き込みを行っている箇所をvar a = ws.Cells[row, column].Value;といった具合に単純代入に置き換えました。

EPPlus検証コード

C#
//EPPlus検証コード(書き込み)

using OfficeOpenXml;
using System.Diagnostics;

var stopwatch = new Stopwatch();

//ファイル読み込み
var inputExcelFile = new FileInfo(@"C:\Users\sakai\Desktop\test.xlsx");
using var wb = new ExcelPackage(inputExcelFile).Workbook;
var ws = wb.Worksheets[0];

//計測開始
stopwatch.Start();

for (int row = 1; row <= 1000; row++) {
    for (int column = 1; column <= 1000; column++) {
        ws.Cells[row, column].Value = 1;
    }
}

//計測終了
stopwatch.Stop();

Console.WriteLine(stopwatch.ElapsedMilliseconds);

ClosedXML検証コード

C#
//ClosedXML検証コード(書き込み)

using OfficeOpenXml;
using System.Diagnostics;

var stopwatch = new Stopwatch();

//ファイル読み込み
var wb = new XLWorkbook(@"C:\Users\sakai\Desktop\test.xlsx", XLEventTracking.Disabled);
var ws = wb.Worksheets.First();

//計測開始
stopwatch.Start();

for (int row = 1; row <= 1000; row++) {
    for (int column = 1; column <= 1000; column++) {
        ws.Cells[row, column].Value = 1;
    }
}

//計測終了
stopwatch.Stop();

Console.WriteLine(stopwatch.ElapsedMilliseconds);

(参考)関連記事

CLosedXMLの概要・操作一覧を以下の記事にまとめております。

関連記事:【C#でエクセル操作】ClosedXMLの特徴と操作まとめ

記事筆者へのお問い合わせ、仕事のご依頼

当社では、IT活用をはじめ、業務効率化やM&A、管理会計など幅広い分野でコンサルティング事業・IT開発事業を行っております。

この記事をご覧になり、もし相談してみたい点などがあれば、ぜひ問い合わせフォームまでご連絡ください。

皆様のご投稿をお待ちしております。

記事筆者へ問い合わせする

※ご相談は無料でお受けいたします。
IT活用経営を実現する - 堺財経電算合同会社