EPPlusを使って、便利にExcel操作(つ´ω`∩)Two

# エンジニアだって色付けしたい！
(つ´ω`∩)< 前回はEPPlusを使って、C#でエクセル操作を行う記事を書きました。
間が空いてしまうとまた書かなくなるので、
本日はセルの装飾について書いていこうと思います。

↓前回の記事はコチラ↓ (∩´ω`∩)< まだ見てなければ読んでほしいです
http://qiita.com/Hyper_Idol_Singer/items/77365e2557c174dfb2d3

大して難しいことはないです。
一番難しいのは色のセンスだと思います。

(つ´ω`∩)< そして、初めての人でも分かるように書きたかったので、超長いです。
必要な情報だけ切り取りして読んでください。
それでは、はじめ。

EPPlus公式
http://epplus.codeplex.com/

## はじめに
前回までのポイントとしては、

- 元エクセルデータがあり、
そこから、新しいエクセルファイルを作成し、必要な値を新しいエクセルファイルに書き込む

ということでした。
今回はより実践的に、元データを作成しました。

![WS000000.JPG](https://qiita-image-store.s3.amazonaws.com/0/36786/b8b4082a-5fe1-7c42-4e84-f134959e789a.jpeg)

モーニング娘。の歴代メンバー表です。
今回は、新しいエクセルデータを作成し、
各メンバーのセルにメンバーカラーを付けていきたいと思います。

(つ´ω`∩)< 今回は9～12期メンバーにカラーを付けます！

前回までの内容をソースにすると以下のようになります。

## 前回までのおさらい(ソース)
```csharp
using OfficeOpenXml;
using System.IO;

namespace One
{
    class Program
    {
        static void Main(string[] args)
        {
            // プロジェクト内に配置したエクセルファイル情報を読み込む
            // エクセルファイル名が「musume.xlsx」
            var inputExcelFile = new FileInfo("musume.xlsx");

            // 読み取った値を入れておく変数を用意する

            // 9期
            object ikuta = null; // 生田
            object sayashi = null; // 鞘師
            object suzuki = null; // 鈴木
            object hukumura = null; // 譜久村

            // 10期
            object iikubo = null; // 飯窪
            object ishida = null; // 石田
            object kudou = null; // 工藤
            object satou = null; // 佐藤

            // 11期
            object oda = null; // 小田

            // 12期
            object ogata = null; // 尾形
            object nonaka = null; // 野中
            object haga = null; // 羽賀
            object makino = null; // 牧野


            using (var inputFile = new ExcelPackage(inputExcelFile))
            {
                // シート名が「member」
                var inputSheet = inputFile.Workbook.Worksheets["member"];

                // 読み取った値を変数に格納する、セルの指定方法は2通り

                ikuta = inputSheet.Cells[16, 1].Value; // A16の値を取得
                sayashi = inputSheet.Cells[17, 1].Value; // A17の値を取得
                suzuki = inputSheet.Cells[18, 1].Value; // A18の値を取得
                hukumura = inputSheet.Cells[19, 1].Value; // A19の値を取得

                iikubo = inputSheet.Cells[16, 2].Value; // B16の値を取得
                ishida = inputSheet.Cells[17, 2].Value; // B17の値を取得
                kudou = inputSheet.Cells[18, 2].Value; // B18の値を取得
                satou = inputSheet.Cells[19, 2].Value; // B19の値を取得

                oda = inputSheet.Cells["C16"].Value; // C16の値を取得

                ogata = inputSheet.Cells["D16"].Value; // D16の値を取得
                nonaka = inputSheet.Cells["D17"].Value; // D17の値を取得
                haga = inputSheet.Cells["D18"].Value; // D18の値を取得
                makino = inputSheet.Cells["D19"].Value; // D19の値を取得
            }

            // 書き読み用エクセルファイルを作成する
            // 作成場所はデスクトップにする
            var outputExcelFile = new FileInfo(@"C:\Users\XXXXXXXXXXXXX\Desktop\addColor.xlsx");

            using (var outputFile = new ExcelPackage(outputExcelFile))
            {
                // エクセルファイルに「memberColor」シートを追加する
                var outputSheet = outputFile.Workbook.Worksheets.Add("memberColor");

                // 手動で各メンバーの期ごとにラベル付けを行う
                outputSheet.Cells[1, 1].Value = "モーニング娘。'15"; // A1にタイトルを記載
                outputSheet.Cells[2, 1].Value = "9期"; // A2に9期のラベル付け
                outputSheet.Cells[2, 2].Value = "10期"; // B2に10期のラベル付け
                outputSheet.Cells[2, 3].Value = "11期"; // C2に11期のラベル付け
                outputSheet.Cells[2, 4].Value = "12期"; // D2に12期のラベル付け

                // 作成したエクセルファイルへの書き込みを行う
                outputSheet.Cells["A3"].Value = ikuta; // 1997-07-07 生まれ
                outputSheet.Cells["A4"].Value = sayashi; // 1998-05-28 生まれ
                outputSheet.Cells["A5"].Value = suzuki; // 1998-08-05 生まれ
                outputSheet.Cells["A6"].Value = hukumura; // 1996-10-30 生まれ

                outputSheet.Cells["B3"].Value = iikubo; // 1994-11-07 生まれ
                outputSheet.Cells["B4"].Value = ishida; // 1997-01-07 生まれ
                outputSheet.Cells["B5"].Value = kudou; // 1999-10-27 生まれ
                outputSheet.Cells["B6"].Value = satou; // 1999-05-07 生まれ

                outputSheet.Cells["C3"].Value = oda; // 1999-03-12 生まれ

                outputSheet.Cells["D3"].Value = ogata; // 1999-02-15 生まれ
                outputSheet.Cells["D4"].Value = nonaka; // 1999-10-07 生まれ
                outputSheet.Cells["D5"].Value = haga; // 2002-03-07 生まれ
                outputSheet.Cells["D6"].Value = makino; // 2001-02-02 生まれ

                // ファイルの保存を、忘れずに・・・
                outputFile.Save();
            }
        }
    }
}
```

## 前回までのおさらい(結果)
ここまでが前回の復習です。
これを実行すると「デスクトップ」に次のようなエクセルファイルが作成されます。

![WS000001.JPG](https://qiita-image-store.s3.amazonaws.com/0/36786/9d609706-2944-8032-bfb7-cd11ae55aa38.jpeg)

作成したエクセルファイルはセル幅などが全て初期状態なので、
セルを広げてみるとこのような感じです。

![WS000002.JPG](https://qiita-image-store.s3.amazonaws.com/0/36786/dba4349e-234d-d78b-ae23-d64cca472970.jpeg)

(つ´ω`∩)< ちゃんと9期～12期までの名前を
新しいエクセルファイルに書き込めました！
ちなみに、何故9期～12期にしたかというと、
現役のメンバーだからです。それだけです。

ここからエクセルファイルの装飾を行っていきます！
罫線を付けようと思うので、1行下げ、1列右に移動して出力します。

## セルの幅を広げておく
作成したばかりのエクセルのシートはデフォルトなので、
シートを追加した後で、幅を広げておきます。

```csharp

// 2(B)～5(E)列目の幅が足りないので、あらかじめ広げておく
outputSheet.Column(2).Width = 12; // B列の幅を広げる
outputSheet.Column(3).Width = 12; // C列の幅を広げる
outputSheet.Column(4).Width = 12; // D列の幅を広げる
outputSheet.Column(5).Width = 12; // E列の幅を広げる

```

## 名前空間の追加

新たに使用するクラスが増えます。
従って、ソースの上部に名前空間を追加しておく必要があります。

ExcelFillStyleクラス(装飾用)

```csharp
using OfficeOpenXml.Style;
```

Colorクラス(色用)

```csharp
using System.Drawing;
```

(つ´ω`∩)< 以上をソース上部に追加してください！
Drawingの方はエラーが出る場合があります。
その場合、参照設定がされていない可能性があるので、
参照設定を確認しましょう！

## 文字を装飾する

セルではなく文字の装飾も行えます。
タイトルの「モーニング娘。'15」を装飾してみます。

・太文字にする
・イタリック体(斜め文字)にする

```csharp

outputSheet.Cells["B2"].Style.Font.Bold = true; // 太文字にする
outputSheet.Cells["B2"].Style.Font.Italic = true; // 斜め文字にする

```

装飾したい文字があるセルを指定すれば装飾が簡単に出来ます！

## 各セルを罫線で区切っておく

見やすいようにセルを罫線で区切ります。
4パターンの罫線を使って、それぞれを区切ります。

・表の全体を「太い罫線」で囲む
・タイトルの「モーニング娘。'15」を「太い罫線」で区切る
・期のラベルを「細めの点線」で区切る
・期ごとに「やや細めの罫線」で区切る

### ・表の全体を「太い」罫線(ExcelBorderStyle.Thick)で囲む

```csharp

// 全体を太い罫線で囲む
// 上(Border.Top)
outputSheet.Cells[2, 2, 2, 5].Style.Border.Top.Style 
    = OfficeOpenXml.Style.ExcelBorderStyle.Thick;

// 右(Border.Right)
outputSheet.Cells[2, 5, 7, 5].Style.Border.Right.Style 
    = OfficeOpenXml.Style.ExcelBorderStyle.Thick;

// 下(Border.Bottom)
outputSheet.Cells[7, 2, 7, 5].Style.Border.Bottom.Style 
    = OfficeOpenXml.Style.ExcelBorderStyle.Thick;

// 左(Border.Left)
outputSheet.Cells[2, 2, 7, 2].Style.Border.Left.Style 
    = OfficeOpenXml.Style.ExcelBorderStyle.Thick;

```

セルの範囲指定[?, ?, ?, ?]が出来るので、それを使っています。
指定の仕方は、[初めのセル位置(座標), 終わりのセル位置(座標)]
というように指定します。
同様に、他の罫線も指定していきます。

### ・タイトルの「モーニング娘。'15」を太い罫線(ExcelBorderStyle.Thick)で区切る
```csharp

// タイトルの「モーニング娘。'15」だけ、太い罫線で区切る
outputSheet.Cells[2, 2, 2, 5].Style.Border.Bottom.Style 
    = OfficeOpenXml.Style.ExcelBorderStyle.Thick;

```

### ・期のラベルを細めの点線(ExcelBorderStyle.Dashed)で区切る

```csharp

// 期のラベルを細めの点線で区切る
outputSheet.Cells[3, 2, 3, 5].Style.Border.Bottom.Style 
    = OfficeOpenXml.Style.ExcelBorderStyle.Dashed;

```

### ・期ごとにやや細めの罫線(ExcelBorderStyle.Medium)で区切る

```csharp

// 期ごとにやや細めの罫線で区切る
outputSheet.Cells[3, 2, 7, 2].Style.Border.Right.Style 
    = OfficeOpenXml.Style.ExcelBorderStyle.Medium; // 9期と10期

outputSheet.Cells[3, 3, 7, 3].Style.Border.Right.Style 
    = OfficeOpenXml.Style.ExcelBorderStyle.Medium; // 10期と11期

outputSheet.Cells[3, 4, 7, 4].Style.Border.Right.Style 
    = OfficeOpenXml.Style.ExcelBorderStyle.Medium; // 11期と12期

```

これで罫線が引けました。
今の状態だと作成されたエクセルはこのような感じになっています。

![WS000003.JPG](https://qiita-image-store.s3.amazonaws.com/0/36786/57e0f91a-5578-24e6-ec2f-09ebb4a45baf.jpeg)

(つ´ω`∩)< なかなかよいですね。
とても出来のいい仕上がりだと思います。
それでは最後に色を付けていきましょう。

## 各セルにメンバーカラーを付ける

(つ´ω`∩)< あとはとっても簡単！
まずは、装飾したいセルのパターンタイプを用意して、
付けたい色を指定するだけです。

```csharp

// 生田セルにメンバーカラーを付ける(色は黄緑)
// パターンタイプを用意
outputSheet.Cells["A3"].Style.Fill.PatternType = ExcelFillStyle.Solid;

// 色付け
outputSheet.Cells["A3"].Style.Fill.BackgroundColor.SetColor(Color.GreenYellow);

```

(つ´ω`∩)< たったこれだけです。
色に関しては、デフォルトの色と名前がMicrosoftの公式にあるので
好きな色を選べます。
↓割と種類も多いです。↓
https://msdn.microsoft.com/ja-jp/library/aa358802(vs.85).aspx

メンバー全員のセルに色を指定すると、次のようなエクセルファイルに
変わりました！

![WS000004.JPG](https://qiita-image-store.s3.amazonaws.com/0/36786/fc7dbfdf-215e-b80c-00cb-a6196c22d2e6.jpeg)

(つ´ω`∩)< これにて完成です！
'15のメンバー表がとても良く作れました。
気に入りました。

## さいごに

このように、とても簡単にC#でエクセル操作が出来て、
作りたい形式のファイルを作成することが出来ます。
便利で簡単なので、機会があれば使ってみてください。
そして、この表を作ってみてください。

(つ´ω`∩)< 最後に今回のソースを全部記載しておきます。
役に立つと良いです。
さようなら～。

```csharp

using OfficeOpenXml;
using OfficeOpenXml.Style;
using System.Drawing;
using System.IO;

namespace One
{
    class Program
    {
        static void Main(string[] args)
        {
            // プロジェクト内に配置したエクセルファイル情報を読み込む
            // エクセルファイル名が「musume.xlsx」
            var inputExcelFile = new FileInfo("musume.xlsx");

            // 読み取った値を入れておく変数を用意する

            // 9期
            object ikuta = null; // 生田
            object sayashi = null; // 鞘師
            object suzuki = null; // 鈴木
            object hukumura = null; // 譜久村

            // 10期
            object iikubo = null; // 飯窪
            object ishida = null; // 石田
            object kudou = null; // 工藤
            object satou = null; // 佐藤

            // 11期
            object oda = null; // 小田

            // 12期
            object ogata = null; // 尾形
            object nonaka = null; // 野中
            object haga = null; // 羽賀
            object makino = null; // 牧野


            using (var inputFile = new ExcelPackage(inputExcelFile))
            {
                // シート名が「member」
                var inputSheet = inputFile.Workbook.Worksheets["member"];

                // 読み取った値を変数に格納する、セルの指定方法は2通り

                ikuta = inputSheet.Cells[16, 1].Value; // A16の値を取得
                sayashi = inputSheet.Cells[17, 1].Value; // A17の値を取得
                suzuki = inputSheet.Cells[18, 1].Value; // A18の値を取得
                hukumura = inputSheet.Cells[19, 1].Value; // A19の値を取得

                iikubo = inputSheet.Cells[16, 2].Value; // B16の値を取得
                ishida = inputSheet.Cells[17, 2].Value; // B17の値を取得
                kudou = inputSheet.Cells[18, 2].Value; // B18の値を取得
                satou = inputSheet.Cells[19, 2].Value; // B19の値を取得

                oda = inputSheet.Cells["C16"].Value; // C16の値を取得

                ogata = inputSheet.Cells["D16"].Value; // D16の値を取得
                nonaka = inputSheet.Cells["D17"].Value; // D17の値を取得
                haga = inputSheet.Cells["D18"].Value; // D18の値を取得
                makino = inputSheet.Cells["D19"].Value; // D19の値を取得
            }

            // 書き読み用エクセルファイルを作成する
            // 作成場所はデスクトップにする
            var outputExcelFile = new FileInfo(@"C:\Users\kunito.kuboki\Desktop\addColor.xlsx");

            using (var outputFile = new ExcelPackage(outputExcelFile))
            {
                // エクセルファイルに「memberColor」シートを追加する
                var outputSheet = outputFile.Workbook.Worksheets.Add("memberColor");

                // 2(B)～5(E)列目の幅が足りないので、あらかじめ広げておく
                outputSheet.Column(2).Width = 12; // B列の幅を広げる
                outputSheet.Column(3).Width = 12; // C列の幅を広げる
                outputSheet.Column(4).Width = 12; // D列の幅を広げる
                outputSheet.Column(5).Width = 12; // E列の幅を広げる

                // 手動で各メンバーの期ごとにラベル付けを行う
                outputSheet.Cells[2, 2].Value = "モーニング娘。'15"; // A1にタイトルを記載
                outputSheet.Cells[3, 2].Value = "9期"; // A2に9期のラベル付け
                outputSheet.Cells[3, 3].Value = "10期"; // B2に10期のラベル付け
                outputSheet.Cells[3, 4].Value = "11期"; // C2に11期のラベル付け
                outputSheet.Cells[3, 5].Value = "12期"; // D2に12期のラベル付け

                // 作成したエクセルファイルへの書き込みを行う
                outputSheet.Cells["B4"].Value = ikuta; // 1997-07-07 生まれ
                outputSheet.Cells["B5"].Value = sayashi; // 1998-05-28 生まれ
                outputSheet.Cells["B6"].Value = suzuki; // 1998-08-05 生まれ
                outputSheet.Cells["B7"].Value = hukumura; // 1996-10-30 生まれ

                outputSheet.Cells["C4"].Value = iikubo; // 1994-11-07 生まれ
                outputSheet.Cells["C5"].Value = ishida; // 1997-01-07 生まれ
                outputSheet.Cells["C6"].Value = kudou; // 1999-10-27 生まれ
                outputSheet.Cells["C7"].Value = satou; // 1999-05-07 生まれ

                outputSheet.Cells["D4"].Value = oda; // 1999-03-12 生まれ

                outputSheet.Cells["E4"].Value = ogata; // 1999-02-15 生まれ
                outputSheet.Cells["E5"].Value = nonaka; // 1999-10-07 生まれ
                outputSheet.Cells["E6"].Value = haga; // 2002-03-07 生まれ
                outputSheet.Cells["E7"].Value = makino; // 2001-02-02 生まれ

                // セルA1「モーニング娘。'15」を装飾する
                outputSheet.Cells["B2"].Style.Font.Bold = true; // 太文字にする
                outputSheet.Cells["B2"].Style.Font.Italic = true; // 斜め文字にする

                // 全体を太い罫線で囲む
                outputSheet.Cells[2, 2, 2, 5].Style.Border.Top.Style 
                    = OfficeOpenXml.Style.ExcelBorderStyle.Thick;
                outputSheet.Cells[2, 5, 7, 5].Style.Border.Right.Style 
                    = OfficeOpenXml.Style.ExcelBorderStyle.Thick;
                outputSheet.Cells[7, 2, 7, 5].Style.Border.Bottom.Style 
                    = OfficeOpenXml.Style.ExcelBorderStyle.Thick;
                outputSheet.Cells[2, 2, 7, 2].Style.Border.Left.Style 
                    = OfficeOpenXml.Style.ExcelBorderStyle.Thick;

                // タイトルの「モーニング娘。'15」だけ、太い罫線で区切る
                outputSheet.Cells[2, 2, 2, 5].Style.Border.Bottom.Style 
                    = OfficeOpenXml.Style.ExcelBorderStyle.Thick;

                // 期のラベルを細めの点線で区切る
                outputSheet.Cells[3, 2, 3, 5].Style.Border.Bottom.Style 
                    = OfficeOpenXml.Style.ExcelBorderStyle.Dashed;

                // 期ごとにやや細めの罫線で区切る
                outputSheet.Cells[3, 2, 7, 2].Style.Border.Right.Style 
                    = OfficeOpenXml.Style.ExcelBorderStyle.Medium; // 9期と10期
                outputSheet.Cells[3, 3, 7, 3].Style.Border.Right.Style 
                    = OfficeOpenXml.Style.ExcelBorderStyle.Medium; // 10期と11期
                outputSheet.Cells[3, 4, 7, 4].Style.Border.Right.Style 
                    = OfficeOpenXml.Style.ExcelBorderStyle.Medium; // 11期と12期

                // 各メンバーセルに色付けを行う
                // 生田・黄緑
                outputSheet.Cells["B4"].Style.Fill.PatternType = ExcelFillStyle.Solid;
                outputSheet.Cells["B4"].Style.Fill.BackgroundColor.SetColor(Color.GreenYellow);

                // 鞘師・赤
                outputSheet.Cells["B5"].Style.Fill.PatternType = ExcelFillStyle.Solid;
                outputSheet.Cells["B5"].Style.Fill.BackgroundColor.SetColor(Color.Red);

                // 鈴木・緑
                outputSheet.Cells["B6"].Style.Fill.PatternType = ExcelFillStyle.Solid;
                outputSheet.Cells["B6"].Style.Fill.BackgroundColor.SetColor(Color.Green);

                // 譜久村・ホットピンク
                outputSheet.Cells["B7"].Style.Fill.PatternType = ExcelFillStyle.Solid;
                outputSheet.Cells["B7"].Style.Fill.BackgroundColor.SetColor(Color.HotPink);

                // 飯窪・ハニー
                outputSheet.Cells["C4"].Style.Fill.PatternType = ExcelFillStyle.Solid;
                outputSheet.Cells["C4"].Style.Fill.BackgroundColor.SetColor(Color.Yellow);

                // 石田・ロイヤルブルー
                outputSheet.Cells["C5"].Style.Fill.PatternType = ExcelFillStyle.Solid;
                outputSheet.Cells["C5"].Style.Fill.BackgroundColor.SetColor(Color.RoyalBlue);

                // 工藤・オレンジ
                outputSheet.Cells["C6"].Style.Fill.PatternType = ExcelFillStyle.Solid;
                outputSheet.Cells["C6"].Style.Fill.BackgroundColor.SetColor(Color.OrangeRed);

                // 佐藤・エメラルドグリーン
                outputSheet.Cells["C7"].Style.Fill.PatternType = ExcelFillStyle.Solid;
                outputSheet.Cells["C7"].Style.Fill.BackgroundColor.SetColor(Color.MediumSeaGreen);

                // 小田・ラベンダー
                outputSheet.Cells["D4"].Style.Fill.PatternType = ExcelFillStyle.Solid;
                outputSheet.Cells["D4"].Style.Fill.BackgroundColor.SetColor(Color.DarkOrchid);

                // 尾形・シーブルー
                outputSheet.Cells["E4"].Style.Fill.PatternType = ExcelFillStyle.Solid;
                outputSheet.Cells["E4"].Style.Fill.BackgroundColor.SetColor(Color.SkyBlue);

                // 野中・紫
                outputSheet.Cells["E5"].Style.Fill.PatternType = ExcelFillStyle.Solid;
                outputSheet.Cells["E5"].Style.Fill.BackgroundColor.SetColor(Color.Purple);

                // 羽賀・ライトオレンジ
                outputSheet.Cells["E6"].Style.Fill.PatternType = ExcelFillStyle.Solid;
                outputSheet.Cells["E6"].Style.Fill.BackgroundColor.SetColor(Color.LightSalmon);

                // 牧野・ライトピンク
                outputSheet.Cells["E7"].Style.Fill.PatternType = ExcelFillStyle.Solid;
                outputSheet.Cells["E7"].Style.Fill.BackgroundColor.SetColor(Color.LightPink);

                // ファイルの保存を、忘れずに・・・
                outputFile.Save();
            }
        }
    }
}

```

## （｀・ω・´）超えていけ、過去も私も