0.前置き

サーバー側でExcelのブックを作るって需要はそれなりにあると思います。
ちょっと調べ物をしたのでその結果をまとめようと思います。
良いなって思ったライブラリーのサンプルも作ってみました。

1.ライブラリーの紹介

Excelをサーバーサイドで作ることができるライブラリーには以下のようなものがあります。ネットでざっと調べてみました。

名称 現行Ver. OpenXML対応 利用難易度 開発活発度
NPOI 1.2.4 × 活発
OpenXML SDK 2.0 不明
ExcelPackage 1.0.0.1 活発でない
EPPlus 3.0.0.2 活発
ExcelCreater 2012 製品

備考

  • NPOIはver.1.3からOpenXML対応するらしいです。
  • ExcelCreaterはアドバンストソフトウェアの製品です。

CodePlexでも似たような話題があがっていて、こちらはたくさんのライブラリーが列挙されています。
CodePlex: Create Excel (.XLS and .XLSX) file from C#

今回はこの中で、開発が一番活発そうなEPPlusを選択してサンプルを作ってみようと思います。

2.インストール

Nugetでインストールできます。CodePlexからはサンプルアプリケーションが一緒に入っているソースコードをダウンロードすることができます。

3.実際に使ってみる

3-1.こんなファイルを作ってみます

表やフィルターや簡単な計算式やグラフを含んでいます。

3-2.コードの抜粋

サンプルコード全体はgithubに載せますが、一部抜粋して解説します。

Excelファイルの作成からシートの追加
一番のおおもとがExcelPackageというオブジェクトになります。
[sourcecode language=”csharp”]
using (var package = new ExcelPackage(newFile))
{
var ws = package.Workbook.Worksheets.Add("4月の家計簿");
….
}
[/sourcecode]

セルにデータを追加
セルの特定方法はExcelでよくある”A2″とかのアドレス指定のほかにも、何行・何列という指定方法もできます。
[sourcecode language=”csharp”]
//データの部分
ws.Cells["A2"].Value = "水道光熱費";
ws.Cells["B2"].Value = "電気";
ws.Cells["C2"].Value = 3000;
ws.Cells["D2"].Value = new DateTime(2012, 4, 1);
[/sourcecode]

セルに計算式の追加
Formulaプロパティに式を書きます。
[sourcecode language=”csharp”]
//合計金額を表示
ws.Cells["A9"].Value = "合計";
ws.Cells["B9"].Formula = "SUM(C2:C7)";
[/sourcecode]

棒グラフの作成
グラフは列挙型で用意されているため、それを選択します。今回は積み上げ棒グラフ(?)です。
[sourcecode language=”csharp”]
var chart = (ws.Drawings.AddChart("4月のお金", eChartType.BarStacked) as ExcelBarChart);
chart.Title.Text = "4月のお金";
chart.SetPosition(0, 400);
chart.SetSize(300, 300);
chart.Series.Add("C2:C7", "D2:D7");
[/sourcecode]

4.サンプルを書いてみての補足

使いやすいです、これは。
ソースコードに付属しているサンプルコードも充実しているので習得も容易です。
はまりそう。

5.サンプルコード

サンプルコードはgithubにホスティングしてあります。
EPPlusのサンプル
コード本体

6.最後に

帳票系の知識がないなーとおもって、Excel帳票的な視点から触ってみました。
他にもPDFで帳票を作るツールとか追っかけてみたいです。