りおんクロニクル


C#でExcelを扱う方法(EPPlus / ClosedXML)|読み書き・書式設定・高速化の実務ガイド【2026年版】

Home【2026年版】C# / .NET入門と実践ガイド|基礎・業務アプリ開発・SQLite連携まで体系的に解説

C#でExcelを扱う場合、実務で最も使われるのが EPPlusClosedXML の2つです。 どちらもExcelをインストールせずに使えるため、業務アプリで非常に人気があります。

この記事でわかること
・EPPlusとClosedXMLの違い
・Excelの読み書き(基本)
・書式設定・テーブル化・数式・画像挿入
・大量データの高速化
・CSV変換・テンプレート利用
・業務アプリ向けベストプラクティス

1. EPPlus と ClosedXML の違い

項目EPPlusClosedXML
特徴高速・高機能直感的で書きやすい
商用利用ライセンス注意(Polyform)MIT(商用OK)
書式設定細かく制御可能簡単に設定できる
大量データ高速やや遅い

商用アプリ → ClosedXMLが無難 高速処理 → EPPlusが有利

2. ClosedXMLでExcelを扱う(初心者〜実務向け)

■ 2-1. Excelの新規作成

using ClosedXML.Excel;

var wb = new XLWorkbook();
var ws = wb.Worksheets.Add("Sheet1");

ws.Cell("A1").Value = "名前";
ws.Cell("B1").Value = "年齢";

ws.Cell("A2").Value = "山田太郎";
ws.Cell("B2").Value = 30;

wb.SaveAs("sample.xlsx");

■ 2-2. Excelの読み込み

var wb = new XLWorkbook("sample.xlsx");
var ws = wb.Worksheet("Sheet1");

string name = ws.Cell("A2").GetString();
int age = ws.Cell("B2").GetValue<int>();

■ 2-3. 書式設定

ws.Cell("B2").Style.NumberFormat.Format = "#,##0";
ws.Range("A1:B1").Style.Font.Bold = true;
ws.Columns().AdjustToContents();

■ 2-4. テーブル化(フィルタ・スタイル)

var range = ws.Range("A1:B10");
range.CreateTable("UserTable");

■ 2-5. 数式の設定

ws.Cell("C2").FormulaA1 = "=B2 * 1.1";

■ 2-6. 画像の挿入

ws.AddPicture("logo.png")
  .MoveTo(ws.Cell("D1"))
  .Scale(0.5);

3. EPPlusでExcelを扱う(高速・高機能)

■ 3-1. 新規作成

using OfficeOpenXml;

ExcelPackage.LicenseContext = LicenseContext.NonCommercial;

using var package = new ExcelPackage();
var ws = package.Workbook.Worksheets.Add("Sheet1");

ws.Cells["A1"].Value = "商品名";
ws.Cells["B1"].Value = "価格";

ws.Cells["A2"].Value = "りんご";
ws.Cells["B2"].Value = 120;

package.SaveAs(new FileInfo("epplus.xlsx"));

■ 3-2. 書式設定

ws.Cells["B2"].Style.Numberformat.Format = "#,##0";
ws.Cells["A1:B1"].Style.Font.Bold = true;

■ 3-3. テーブル化

var tbl = ws.Tables.Add(ws.Cells["A1:B10"], "ProductTable");
tbl.TableStyle = TableStyles.Medium2;

■ 3-4. 数式

ws.Cells["C2"].Formula = "B2 * 1.1";

■ 3-5. 画像挿入

var pic = ws.Drawings.AddPicture("Logo", new FileInfo("logo.png"));
pic.SetPosition(0, 0);
pic.SetSize(200);

4. 大量データの高速化(1万〜10万件)

■ ClosedXMLの高速化ポイント

■ EPPlusの高速化ポイント

■ DataTable → Excel(EPPlus)

ws.Cells["A1"].LoadFromDataTable(dataTable, true);

5. CSV変換(高速・軽量)

Excelが不要な場合はCSVが最速です。

File.WriteAllLines("output.csv",
    data.Select(x => $"{x.Id},{x.Name},{x.Age}"));

6. テンプレート利用(帳票向け)

請求書・納品書などの帳票は、 テンプレートExcelを読み込んで値だけ差し替えるのが最も実務的です。

■ ClosedXML例

var wb = new XLWorkbook("template.xlsx");
var ws = wb.Worksheet("Sheet1");

ws.Cell("B2").Value = customer.Name;
ws.Cell("B3").Value = order.Total;

wb.SaveAs("invoice.xlsx");

7. 業務アプリ向けベストプラクティス

まとめ:EPPlusとClosedXMLを使い分けると“実務が圧倒的に楽になる”

「Excel出力ができるアプリは強い」 業務アプリの価値を一段上げるために、 EPPlusとClosedXMLを使いこなしてみてください。

前のページ  次のページ