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

(∩´ω`∩)< C#でエクセル操作が出来るライブラリを紹介します。
機能も優れていて、使いやすいのでオススメです。

使い方を忘れないように、忘備録として書きます。
字ばっかりでごめんなさいですが、初めて使う人が分かるように書きます。
まずは部分的な説明をして、最後にソースをまとめたものを記述します。
説明云々より使い方を知りたい場合は、下まで飛んでください。
(∩´ω`∩)< それでははじめ。

# 今回はデータの入ったエクセルファイルから、書き込み用のエクセルファイルを新たに作成してデータの移行を行う手順です。

## データの読み込み
- エクセルファイルを読み込む

まずは、データの入ったエクセルファイルの操作です。

```csharp

// ファイル情報を読み込む
var inputExcelFile = new FileInfo("input_file.xlsx");
```

※ちなみに「.xls」ファイルはEPPlusで扱えないので注意です！！！

FileInfoを使うためには名前空間System.IOを定義しておく必要があります。
ソースファイル上部に以下を記載します。

```csharp
using System.IO;
```

GetFile()の引数には、読み込むエクセルファイルのパスを入れて下さい。

- シートを読み込む

次に、読み込みたいシートを指定します。

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

    // 以下に、シート内のセルの読み込み処理を記述する
}
```

ExcelPackageを使うためには名前空間OfficeOpenXmlを定義しておく必要があります。
ソースファイル上部に以下を記載します。

```csharp
using OfficeOpenXml;
```

名前空間の指定が多くなってきたら、ソースの記載のない所で
「右クリック」⇒「usingの整理」⇒「未使用のusingの削除」
を行うと、使っていない名前空間を自動で削除してくれます。
また、「右クリック」⇒「usingの整理」⇒「usingの並び替え」
を行うことで名前空間の並び替えも自動で行ってくれます。

(∩´ω`∩)< それでもエラーが出る場合は、プロジェクト内の「参照設定」に
使いたい名前空間が追加されているか確認しましょう！

- セルの値を読み込む

※次の内容は、usingブロック内で行います。

欲しいセルの値を読み込みます。
セルの指定方法は2種類あります。

1.セルの行と列の位置で指定する

```csharp
var cellA1 = .Cells[1, 1].Value; // A1の値を取得
var cellA2 = .Cells[2, 1].Value; // A2の値を取得
var cellB1 = .Cells[1, 2].Value; // B1の値を取得
```

2.セル名で指定する

```csharp
var cellA1 = .Cells["A1"].Value; // A1の値を取得
var cellA2 = .Cells["A2"].Value; // A2の値を取得
var cellB1 = .Cells["B1"].Value; // B1の値を取得
```

(∩´ω`∩)< どちらの方法でもセルの指定を行えます。
お好みでどうぞ。

これで、値を取得するエクセルファイルから、
値の取得は出来たので、次は書き込みに移ります。

## データの書き込み

- 書き込み用のエクセルファイルを作成する

まずはFileInfoクラスを使って、書き込み用のエクセルファイルを作成しましょう。

```csharp
var outputExcelFile = new FileInfo("outputFile.xlsx");
```

FileInfo()の引数には作成したい場所のパスと、ファイル名を指定します。

- 作成したエクセルファイルにシートを追加する

今はまだ、シートのないエクセルファイルを作っただけなので、シートを追加します。

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

これで、「outputSheet」が作成されました。
いよいよ、シート内に読み取ったデータを書き込んでいきます。

- 作成したシートに値を書き込む

※次の内容は、usingブロック内で行います。

シートの用意も出来たので、読み取っておいた値を書き込んでいきます。
読み取り時と同じように、書き込みたいセルを指定してください。

```csharp
sheet.Cells[1, 1].Value = cellA1; // セルA1に書き込み
sheet.Cells["A2"].Value = cellA2; // セルA2に書き込み
sheet.Cells["B1"].Value = cellB1; // セルB1に書き込み
```

- エクセルファイルを保存する

※次の内容は、usingブロック内で行います。

最後に忘れちゃいけないのが保存です。
保存をしないでしまうと、作成したエクセルデータは真っ白になってしまいます。
忘れずに保存しましょう。

```csharp
outputFile.Save();
```

(∩´ω`∩)< これで、読み取りから書き込みまで終了です！！！
お疲れ様でした～。

## さいごに

使い方を覚えてしまえば、とても楽にエクセルファイルが扱えます！
更に、EPPlusを使って、セルの色付けなどの
ある程度の整形も行えます。
その方法は、次にでも書こうと思います。
エクセル操作の機会があればぜひ使ってみてください。

(∩´ω`∩)< 最後にまとめたソースを貼ってお別れです。
さようなら～

```csharp
// ファイル情報を読み込む
var inputExcelFile = new FileInfo("input_file.xlsx");

// 読み取った値を入れておく変数を用意する
object cellA1 = null;
object cellA2 = null;
object cellB1 = null;

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

    cellA1 = inputSheet.Cells["A1"].Value; // A1の値を取得
    cellA2 = inputSheet.Cells["A2"].Value; // A2の値を取得
    cellB1 = inputSheet.Cells["B1"].Value; // B1の値を取得
}

// 書き読み用エクセルファイルを作成する
var outputExcelFile = new FileInfo("outputFile.xlsx");

using (var outputFile = new ExcelPackage(outputExcelFile))
{
    // エクセルファイルに「outputSheet」を追加する
    var outputSheet = outputFile.Workbook.Worksheets.Add("outputSheet");
 
    outputSheet.Cells[1, 1].Value = cellA1; // セルA1に書き込み
    outputSheet.Cells["A2"].Value = cellA2; // セルA2に書き込み
    outputSheet.Cells["B1"].Value = cellB1; // セルB1に書き込み

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

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