C#でExcelファイルにピボットテーブルとピボットグラフを作成

大量データを効率的に処理・分析することは、意思決定において重要な要素の一つです。C#を用いてExcel内でピボットテーブルとピボットグラフを自動生成することで、元データをインタラクティブな多次元分析表やグラフへと変換できます。また、プログラムによる自動化により、データ更新の同期や分析結果の一貫性を確保でき、定期的な標準化レポートの作成にも適しています。静的な表と異なり、ピボットグラフは動的なフィルタリングやドリルダウンが可能であり、意思決定者により詳細なデータを提供し、深い分析を支援します。

本記事では、.NETフレームワークを使用し、**C#でExcelワークブックにピボットテーブルとピボットグラフを作成する方法**を紹介します。

本記事で使用する方法には、無料の[Free Spire.XLS for .NET](https://jp.e-iceblue.com/introduce/free-spire-xls-for-net.html)が必要です。NuGetからインストールできます。
```sh
PM> Install-Package FreeSpire.XLS
```

## C#でExcelファイルにピボットテーブルを作成する
ピボットテーブルを作成するには、まず`Workbook.PivotCaches.Add(CellRange)`メソッドを使用して、指定したセル範囲から`XlsPivotCache`オブジェクトを作成します。その後、`Worksheet.PivotTables.Add(name: string, location: CellRange, XlsPivotCache)`メソッドを使用し、作成した`XlsPivotCache`オブジェクトを基にピボットテーブルを生成し、行フィールド、列フィールド、値フィールドなどを設定して、完成度の高いピボットテーブルを作成します。

### 操作手順
1. 必要なモジュールをインポートする。
2. `Workbook`クラスのインスタンスを作成する。
3. `Workbook.LoadFromFile`メソッドを使用して、指定したExcelファイルをワークブックに読み込む。
4. `Workbook.Worksheets[]`プロパティを使用してワークシートを取得する。
5. `Worksheet.Range[]`プロパティを使用し、データソースのセル範囲を定義する。
6. `Workbook.PivotCaches.Add`メソッドを使用し、データソース範囲をキャッシュに追加し、`XlsPivotCache`オブジェクトを作成する。
7. `Worksheet.PivotTables.Add`メソッドを使用し、作成した`XlsPivotCache`オブジェクトを基にピボットテーブルを追加する（ピボットテーブルは別のシートにも作成可能）。
8. `XlsPivotTable.PivotFields[]`プロパティを使用し、行フィールドを設定する。
9. `XlsPivotTable.DataFields.Add`メソッドを使用し、値フィールドを設定する。
10. `XlsPivotCache.CalculateData()`メソッドを使用し、ピボットテーブルを更新する。
11. `XlsPivotTable.BuiltInStyle`プロパティを使用し、内蔵スタイルを適用する。
12. `XlsPivotTable.AutoFormatType`プロパティを使用し、自動フォーマットを適用する。
13. `Workbook.SaveToFile`メソッドを使用し、変更したワークブックを保存する。
14. リソースを解放する。

**コードサンプル**
```csharp
using Spire.Xls;
using Spire.Xls.Core;

namespace CreatePivotTable
{
    class Program
    {
        static void Main(string[] args)
        {
            // Workbookオブジェクトを作成
            Workbook workbook = new Workbook();

            // Excelファイルを読み込む
            workbook.LoadFromFile("Sample.xlsx");

            // 最初のワークシートを取得
            Worksheet sheet = workbook.Worksheets[0];

            // ピボットテーブルを作成するためのデータ範囲を取得
            CellRange range = sheet.Range[1, 1, 16, 8];

            // XlsPivotCacheオブジェクトを作成
            PivotCache pivotCache = workbook.PivotCaches.Add(range);

            // ピボットテーブルを作成
            PivotTable pivotTable = sheet.PivotTables.Add("Sales Analysis", sheet.Range[18, 1], pivotCache);

            // 行フィールドを追加
            IPivotField field1 = pivotTable.PivotFields[sheet.Range["C1"].Value];
            field1.Axis = AxisTypes.Row;
            IPivotField field2 = pivotTable.PivotFields[sheet.Range["D1"].Value];
            field2.Axis = AxisTypes.Row;

            // 値フィールドを追加
            IPivotField field3 = pivotTable.PivotFields[sheet.Range["F1"].Value];
            pivotTable.DataFields.Add(field3, "SUM: " + sheet.Range["F1"].Value, SubtotalTypes.Sum);
            IPivotField field4 = pivotTable.PivotFields[sheet.Range["G1"].Value];
            pivotTable.DataFields.Add(field4, "SUM: " + sheet.Range["G1"].Value, SubtotalTypes.Sum);
            IPivotField field5 = pivotTable.PivotFields[sheet.Range["H1"].Value];
            pivotTable.DataFields.Add(field5, "SUM: " + sheet.Range["H1"].Value, SubtotalTypes.Sum);

            // ピボットテーブルを更新
            pivotTable.CalculateData();

            // ピボットテーブルのフォーマットを設定
            pivotTable.AutoFormatType = PivotAutoFomatTypes.Table2;

            // ワークブックを保存
            workbook.SaveToFile("output/CreatePivotTable.xlsx");
            workbook.Dispose();
        }
    }
}
```

結果
![2025-03-13_175548.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/00a9fa35-8e2a-47e2-82c2-6ddb37e77dc4.png)


## C#でExcelファイルにピボットグラフを作成する
ピボットグラフはピボットテーブルを基に作成されます。Excelワークシート内のピボットテーブルを取得するには、`Worksheet.PivotTables.get_Item()`メソッドを使用します。その後、`Worksheet.Charts.Add()`メソッドを用いてピボットグラフを作成し、適切なフォーマット設定を行います。

### 操作手順
1. 必要なモジュールをインポートする。
2. `Workbook`クラスのインスタンスを作成する。
3. `Workbook.LoadFromFile`メソッドを使用し、Excelファイルを読み込む。
4. `Workbook.Worksheets[]`プロパティを使用し、ピボットテーブルを含むワークシートを取得する。
5. `Worksheet.PivotTables[]`プロパティを使用し、ピボットテーブルを取得する。
6. `Worksheet.Charts.Add`メソッドを使用し、選択したピボットテーブルを基にグラフを作成する。
7. `Chart`クラスの`TopRow`、`LeftColumn`、`BottomRow`、`RightColumn`プロパティを設定し、グラフの位置を指定する。
8. `Chart.ChartTitle`プロパティを設定し、グラフのタイトルを指定する。
9. `Workbook.SaveToFile`メソッドを使用し、変更したワークブックを保存する。
10. リソースを解放する。

**コードサンプル**
```csharp
using Spire.Xls;
using Spire.Xls.Core;

namespace CreatePivotTable
{
    class Program
    {
        static void Main(string[] args)
        {
            // Workbookオブジェクトを作成
            Workbook workbook = new Workbook();

            // Excelファイルを読み込む
            workbook.LoadFromFile("output/CreatePivotTable.xlsx");

            // 最初のワークシートを取得
            Worksheet sheet = workbook.Worksheets[0];

            // ピボットテーブルを取得
            IPivotTable pivotTable = sheet.PivotTables[0];

            // ピボットグラフを作成
            Chart pivotChart = sheet.Charts.Add(ExcelChartType.BarClustered, pivotTable);

            // グラフの位置を設定
            pivotChart.TopRow = 18;
            pivotChart.LeftColumn = 8;
            pivotChart.BottomRow = 35;
            pivotChart.RightColumn = 20;

            // グラフのタイトルを設定
            pivotChart.ChartTitle = "";

            // ワークブックを保存
            workbook.SaveToFile("output/CreatePivotChart.xlsx");
            workbook.Dispose();
        }
    }
}
```

結果
![2025-03-13_180922.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/320fd741-4297-4f31-adb2-91d4c1f16565.png)

本記事では、C#を使用してExcelワークシートにピボットテーブルとピボットグラフを作成する方法を解説しました。