Emotion Wave Tech Blog

福岡にあるエモーションウェーブ株式会社のエンジニアが書いています。

C#でClosedXMLを使ってExcel出力を実装する

久しぶりのブログです。
EW中原です。

本日はC#で簡単なExcel出力の実装についてです。

昔はCOMを使って実装していましたが、
動かすPCにExcelが入ってないと動かない、気をつけて実装しないとEXCELのプロセスが残る等色々とあるので、
今回はCOMを使わなくてもExcel操作ができるClosedXMLというものを使って実装してみました。

github.com

早速実装します。
今回は適当にConsoleApplicationを作成しました。

まずは、NuGetからClosedXMLを検索・選択して「インストール」。
f:id:devew:20200110135053p:plain f:id:devew:20200110135124p:plain

インストール終わると、以下の参照設定となります。
色々追加されています。
f:id:devew:20200110135253p:plain

Program.csusing ClosedXML.Excel; を追加します。
ClosedXMLを使うためです。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using ClosedXML.Excel;

namespace ClosedXMLSample
{
    class Program
    {
        static void Main(string[] args)
        {
        }
    }
}

実際に新規WorkBookを作成します。
今回は野菜一覧(野菜の価格表)を作成してみました。
完成したコードは以下です。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using ClosedXML.Excel;

namespace ClosedXMLSample
{
    class Program
    {
        /// <summary>
        /// 野菜の一覧を作成します
        /// </summary>
        /// <param name="args"></param>
        static void Main(string[] args)
        {
            // Workbookを作成する
            using (XLWorkbook workbook = new XLWorkbook())
            {
                // Worksheetを追加
                IXLWorksheet worksheet = workbook.AddWorksheet("Sheet1");

                int row = 1;

                // 1行目にヘッダー部を出力
                worksheet.Cell(row, 1).SetValue("No");
                worksheet.Cell(row, 2).SetValue("Yasai Name");
                worksheet.Cell(row, 3).SetValue("Price");
                row++;

                // 2行目以降に野菜一覧作成
                worksheet.Cell(row, 1).SetValue(row-1);
                worksheet.Cell(row, 2).SetValue("Carrot");
                worksheet.Cell(row, 3).SetValue(120);
                row++;

                worksheet.Cell(row, 1).SetValue(row-1);
                worksheet.Cell(row, 2).SetValue("Tomato");
                worksheet.Cell(row, 3).SetValue(220);
                row++;

                worksheet.Cell(row, 1).SetValue(row-1);
                worksheet.Cell(row, 2).SetValue("Cabbage");
                worksheet.Cell(row, 3).SetValue(100);

                //出力した表の内側に罫線を引く
                worksheet.Range(1, 1, row, 3).Style.Border.InsideBorder = XLBorderStyleValues.Thin;

                //出力した表の外側に罫線を引く
                worksheet.Range(1, 1, row, 3).Style.Border.OutsideBorder = XLBorderStyleValues.Thin;

                // ヘッダー(1行目)に背景色を付ける
                worksheet.Range(1, 1, 1, 3).Style.Fill.BackgroundColor = XLColor.SkyBlue;

                // 名前をつけてブックを保存
                workbook.SaveAs("ClosedXMLSample.xlsx");
            }
        }
    }
}

出力結果はこのようになりました。
f:id:devew:20200110153217p:plain

ソースコード一式は以下に置きました。
github.com

今回は基本的なことしか紹介できませんでしたが、もちろん他にも色々な機能があります。
またご紹介できたらと思います。