EPPlusはC#でエクセルファイルを操作できるライブラリでは代表的であり、同じくC#のライブラリであるClosedXMLと双璧を成す存在です。
本記事ではEPPlusの概要とエクセルファイルの基本的な操作について解説します。尚、ClosedXMLについても過去に本記事と同様の記事を作成しています。下記関連記事をご参考ください。
◇目次
EPPlus概要:C#でエクセルファイルを操作するオープンソースライブラリ
EPPlusは、ClosedXMLと並びエクセルファイルを操作できるAPIを提供するオープンソースライブラリです。いずれもOpenXML(MS純製ライブラリ)のラッパーとして構築されたものです。セル読み書きは当然のこと、エクセルのUIで実装されている多くの操作に対応しています。
記事作成現在の最新バージョンは6.X系。5.X以降は商用有料ライセンス、4.X系以前はサポート終了かつLGPLライセンスとなっています。
双璧となるClosedXMLはMITライセンスでコスト面の敷居が低い反面、動作速度等に関してはEPPlusの方が上回っています(筆者実測)。有償サポートがあり動作に優れるEPPlusを選ぶか、コミュニティで開発が進むClosedXMLを選ぶかはプロジェクトごとの判断となるでしょう。
尚、EPPlusのライセンスに関する詳細や、EPPlusとClosedXMLの動作等比較について、詳しくは以下の関連記事もご参考ください。
EPPlus4.5.3.3におけるエクセルファイルの基本的な操作
EPPlus4.5.3.3(4.X系最終版)におけるエクセルファイルの操作について記述します。尚、内容はClosedXMLやVBAなどの関数に似通ったものとなっています。
csファイルへの名前空間導入(usingステートメント)
csファイルへの名前空間導入usingステートメントの書き方は次の通りです。OfficeOpenXml.Styleはスタイル指定(色など)を使用する場合に必要です。
C#
using OfficeOpenXml;
using OfficeOpenXml.Style;
新しくワークブックを作る
ExcelPackageを引数なしでインスタンス化することで新しいワークブックを作成します。
C#
using ExcelPackage excelPackage = new ExcelPackage();
using ExcelWorkbook newWb = excelPackage.Workbook;
既存ワークブックを開く
ExcelPackageの引数にStreamまたはFileInfoを指定してインスタンス化することで、既存ワークブックを開きます。
C#
//通常のファイルオープン
FileInfo fileInfo = new FileInfo(filePath);
using ExcelWorkbook wb = new ExcelPackage(fileInfo).Workbook;
//読み取り専用で開く
using FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
using ExcelWorkbook wbAsReadOnly = new ExcelPackage(fs).Workbook;
ワークシートを取得・追加
上記で生成したExcelWorkbookクラスオブジェトのWorksheetsプロパティに対して操作を行います。
Worksheetsプロパティの型ExcelWorksheetsはIEnumerable
C#
//既存ワークシートを取得(workBookはExcelWorkbookクラスオブジェト)
ExcelWorksheet workSheet = workBook.First(x => x.Name == targetSheetName);
//新しいワークシートを追加
ExcelWorksheet workSheet = workBook.Worksheets.Add(sheetName);
ワークシート内のセルの値を取得
workSheet.Cellsプロパティからセルの値を取得できます。
C#
//行列番号指定
var rowNo = 1;
var columnNo = 1;
object? value = workSheet.Cells[rowNo, columnNo].Value
//stringアドレス指定
object? value = workSheet.Cells["A1"].Value
ワークシート内のセルに値を書き込み
SetValueメソッドを使う方法と、Cellsプロパティ使う方法のどちらでも実現可能です。
C#
//※workSheetは上記で生成したExcelWorkbookクラスオブジェト
//【workSheet.Cellsプロパティを使用】
//行列番号指定
var rowNo = 1;
var columnNo = 1;
workSheet.Cells[rowNo, columnNo].Value = "セルに入れる値";
//stringアドレス指定
workSheet.Cells["A1"].Value = "セルに入れる値";
//【SetValueメソッドを使用】
//行列番号指定
int rowNumber = 1;
int columnNumber = 2;
workSheet.SetValue(rowNumber, columnNumber, "セルに入れる値");
//stringアドレス指定
workSheet.SetValue("A1", "セルに入れる値");
セルに数式を入れる
数式を入れるには、ValueではなくFormulaプロパティに指定します。
C#
//セルに数式を入れる
workSheet.Cells[1, 1].Formula = "A2+A3";
セルをコピー・ペースト
C#
//セルのコピー・ペースト
workSheet.Cells[1, 1].Copy(workSheet.Cells[10, 10]);
ワークシート内で検索
workSheet.Cellsプロパティに対してLinqメソッドを使用することでワークシート内のセルを検索することが出来ます。
C#
//※workSheetは上記で生成したExcelWorkbookクラスオブジェト
var searchAddressResult = workSheet.Cells.First(x => x.Value?.ToString() == "検索する値").Address;
Console.WriteLine(searchAddressResult); //A1
ワークブックを保存
ExcelPackageオブジェクトのSaveメソッド(上書き保存)またはSaveAsメソッド(名前を付けて保存)を使用します。
C#
//上書き保存
using ExcelPackage excelPackage = new ExcelPackage(fileInfo);
//中略
//上書き保存
excelPackage.Save();
//名前を付けて保存
FileInfo fileInfo = new FileInfo(saveFilePath);
excelPackage.SaveAs(fileInfo);
セルスタイルの指定
フォントのサイズ・色・スタイル
C#
//フォントサイズ
workSheet.Cells[1, 1].Style.Font.Size = 20;
//フォント色(引数はa, r, g, b)
workSheet.Cells[1, 1].Style.Font.Color.SetColor(120, 0, 255, 0);
//太字(ボールド体)
workSheet.Cells[1, 1].Style.Font.Bold = true;
//斜体(イタリック対)
workSheet.Cells[1, 1].Style.Font.Italic = true;
セル内の水平・垂直位置(右寄せ、中央寄せなど)の指定
C#
//セル内で水平中央寄せ
workSheet.Cells[1, 1].Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;
//セル内で垂直中央寄せ
workSheet.Cells[1, 1].Style.VerticalAlignment = ExcelVerticalAlignment.Center;
セル背景色の変更
C#
//セル背景色(引数はa, r, g, b)
//※PatternTypeを事前に指定しないと、SetColorで例外がスローされます。
workSheet.Cells[1, 1].Style.Fill.PatternType = ExcelFillStyle.Solid;
workSheet.Cells[1, 1].Style.Fill.BackgroundColor.SetColor(120, 0, 0, 255);
//セル背景色はSystem.Drawing.Colorクラスでも指定可
workSheet.Cells[3, 3].Style.Fill.PatternType = ExcelFillStyle.Solid;
workSheet.Cells[3, 3].Style.Fill.BackgroundColor.SetColor(System.Drawing.Color.Aqua);
行高・列幅の指定
C#
//カラム幅
workSheet.Column(2).Width = 20;
//行幅
workSheet.Row(4).Height = 20;
範囲を指定して値やスタイルを変更
workSheet.Cellsプロパティに範囲を指定して値やスタイルを変更することが出来ます。
C#
//範囲を指定して値やスタイルを指定
//(引数はFromRow, FromCol, ToRow, ToCol)
workSheet.Cells[4, 5, 10, 6].Value = "セルに入れる値";
workSheet.Cells[4, 5, 10, 6].Style.Fill.PatternType = ExcelFillStyle.Solid;
workSheet.Cells[4, 5, 10, 6].Style.Fill.BackgroundColor.SetColor(120, 0, 255, 0);
記事筆者へのお問い合わせ、仕事のご依頼
当社では、IT活用をはじめ、業務効率化やM&A、管理会計など幅広い分野でコンサルティング事業・IT開発事業を行っております。
この記事をご覧になり、もし相談してみたい点などがあれば、ぜひ問い合わせフォームまでご連絡ください。
皆様のご投稿をお待ちしております。