フッターコンテンツにスキップ
IRONXLの使用

C#でExcelピボットテーブルを作成する方法

Excel ピボットテーブルをプログラムで操作することは、ソースデータを分析し計算する必要があるビジネスアプリケーションで一般的な要件です。 Microsoft の Excel Interop は Excel ファイルでピボットテーブルを作成する従来の方法でしたが、IronXL のような現代的なソリューションは重要な利点を提供します。 このガイドは、C# Interop を使用して Excel でピボットテーブルを作成するか、より良い代替手段を選択するための実例を交えた両方の方法を詳述しています。

2 つのアプローチを理解する

Excel Interop とは何ですか?

Excel Interop は Microsoft Excel を C# 経由で直接制御するために COM (コンポーネント オブジェクト モデル) を使用します。 システムに Office のインストールが必要で、ユーザーがアプリケーションとやり取りするのと同じように Excel を自動化します。 各ワークシート、ワークブック、およびセルはコードを介して操作できるオブジェクトになります。

IronXL とは何ですか?

IronXL は、Microsoft Office を必要とせずに Excel ファイルを読み取り、編集、作成できるスタンドアロンの .NET ライブラリです。 Windows、Linux、macOS、および Docker コンテナー全体で動作するため、現代の展開シナリオに最適です。 COM interop のオーバーヘッドなしでデータを開き、保存し、エクスポートできます。

環境のセットアップ

Excel Interop の場合

Install-Package Microsoft.Office.Interop.Excel

IronXL の場合

Install-Package IronXL.Excel

NuGet パッケージ マネージャー UI を使用して "IronXL.Excel" を検索し、インストールをクリックします。 .NET CLI を使ったコマンド引数でのインストールや GitHub からの直接参照も可能です。

両方のライブラリは NuGet で利用できます。 Excel Interop は Microsoft Office の完全インストールが必要ですが、IronXL は独立して動作します。 進行する前に、システムが要件を満たしていることを確認してください。

C # Interop を用いた Excel ピボットテーブルのプログラム作成

従来の Interop アプローチを使用してプログラム的にピボットテーブルを作成する方法を示す完全な例があります。

using Excel = Microsoft.Office.Interop.Excel;
class Program
{
    static void Main(string[] args)
    {
        // Create Excel application instance
        var excelApp = new Excel.Application();
        var workbook = excelApp.Workbooks.Add();
                    var dataSheet = (Excel.Worksheet)workbook.Worksheets[1];
            var pivotSheet = (Excel.Worksheet)workbook.Worksheets.Add();
            // Add header row and sample data
            dataSheet.Cells[1, 1] = "Product";
            dataSheet.Cells[1, 2] = "Region";
            dataSheet.Cells[1, 3] = "Sales";
            // ... populate data rows with values
            // Add sample data rows
            dataSheet.Cells[2, 1] = "Laptop";
            dataSheet.Cells[2, 2] = "North";
            dataSheet.Cells[2, 3] = 1200;
            dataSheet.Cells[3, 1] = "Laptop";
            dataSheet.Cells[3, 2] = "South";
            dataSheet.Cells[3, 3] = 1500;
            dataSheet.Cells[4, 1] = "Phone";
            dataSheet.Cells[4, 2] = "North";
            dataSheet.Cells[4, 3] = 800;
            dataSheet.Cells[5, 1] = "Phone";
            dataSheet.Cells[5, 2] = "South";
            dataSheet.Cells[5, 3] = 950;
            dataSheet.Cells[6, 1] = "Tablet";
            dataSheet.Cells[6, 2] = "East";
            dataSheet.Cells[6, 3] = 600;
            dataSheet.Cells[7, 1] = "Tablet";
            dataSheet.Cells[7, 2] = "West";
            dataSheet.Cells[7, 3] = 750;
            dataSheet.Cells[8, 1] = "Monitor";
            dataSheet.Cells[8, 2] = "North";
            dataSheet.Cells[8, 3] = 400;
            dataSheet.Cells[9, 1] = "Monitor";
            dataSheet.Cells[9, 2] = "South";
            dataSheet.Cells[9, 3] = 500;
            dataSheet.Cells[10, 1] = "Keyboard";
            dataSheet.Cells[10, 2] = "East";
            dataSheet.Cells[10, 3] = 300;
            // Create pivot cache from source data range
            Excel.Range dataRange = dataSheet.Range["A1:C10"];
            Excel.PivotCache pivotCache = workbook.PivotCaches().Create(
                Excel.XlPivotTableSourceType.xlDatabase, dataRange);
            // Create PivotTable at specific location
            Excel.PivotTables pivotTables = (Excel.PivotTables)pivotSheet.PivotTables();
            Excel.PivotTable pivotTable = pivotTables.Add(
                pivotCache, pivotSheet.Range["A3"], "SalesPivot");
            // Configure pivot table fields - row and column headers
            ((Excel.PivotField)pivotTable.PivotFields("Product")).Orientation =
                Excel.XlPivotFieldOrientation.xlRowField;
            ((Excel.PivotField)pivotTable.PivotFields("Region")).Orientation =
                Excel.XlPivotFieldOrientation.xlColumnField;
            ((Excel.PivotField)pivotTable.PivotFields("Sales")).Orientation =
                Excel.XlPivotFieldOrientation.xlDataField;
            // Configure grand totals and formatting
            pivotTable.RowGrand = true;
            pivotTable.ColumnGrand = true;
            // Save the Excel file
            workbook.SaveAs("pivot_interop.xlsx");
            workbook.Close();
            excelApp.Quit();
            // Critical: Release COM objects to avoid errors
            #if WINDOWS
            Marshal.ReleaseComObject(pivotTable);
            Marshal.ReleaseComObject(pivotSheet);
            Marshal.ReleaseComObject(dataSheet);
            Marshal.ReleaseComObject(workbook);
            Marshal.ReleaseComObject(excelApp);
            #endif
    }
}
using Excel = Microsoft.Office.Interop.Excel;
class Program
{
    static void Main(string[] args)
    {
        // Create Excel application instance
        var excelApp = new Excel.Application();
        var workbook = excelApp.Workbooks.Add();
                    var dataSheet = (Excel.Worksheet)workbook.Worksheets[1];
            var pivotSheet = (Excel.Worksheet)workbook.Worksheets.Add();
            // Add header row and sample data
            dataSheet.Cells[1, 1] = "Product";
            dataSheet.Cells[1, 2] = "Region";
            dataSheet.Cells[1, 3] = "Sales";
            // ... populate data rows with values
            // Add sample data rows
            dataSheet.Cells[2, 1] = "Laptop";
            dataSheet.Cells[2, 2] = "North";
            dataSheet.Cells[2, 3] = 1200;
            dataSheet.Cells[3, 1] = "Laptop";
            dataSheet.Cells[3, 2] = "South";
            dataSheet.Cells[3, 3] = 1500;
            dataSheet.Cells[4, 1] = "Phone";
            dataSheet.Cells[4, 2] = "North";
            dataSheet.Cells[4, 3] = 800;
            dataSheet.Cells[5, 1] = "Phone";
            dataSheet.Cells[5, 2] = "South";
            dataSheet.Cells[5, 3] = 950;
            dataSheet.Cells[6, 1] = "Tablet";
            dataSheet.Cells[6, 2] = "East";
            dataSheet.Cells[6, 3] = 600;
            dataSheet.Cells[7, 1] = "Tablet";
            dataSheet.Cells[7, 2] = "West";
            dataSheet.Cells[7, 3] = 750;
            dataSheet.Cells[8, 1] = "Monitor";
            dataSheet.Cells[8, 2] = "North";
            dataSheet.Cells[8, 3] = 400;
            dataSheet.Cells[9, 1] = "Monitor";
            dataSheet.Cells[9, 2] = "South";
            dataSheet.Cells[9, 3] = 500;
            dataSheet.Cells[10, 1] = "Keyboard";
            dataSheet.Cells[10, 2] = "East";
            dataSheet.Cells[10, 3] = 300;
            // Create pivot cache from source data range
            Excel.Range dataRange = dataSheet.Range["A1:C10"];
            Excel.PivotCache pivotCache = workbook.PivotCaches().Create(
                Excel.XlPivotTableSourceType.xlDatabase, dataRange);
            // Create PivotTable at specific location
            Excel.PivotTables pivotTables = (Excel.PivotTables)pivotSheet.PivotTables();
            Excel.PivotTable pivotTable = pivotTables.Add(
                pivotCache, pivotSheet.Range["A3"], "SalesPivot");
            // Configure pivot table fields - row and column headers
            ((Excel.PivotField)pivotTable.PivotFields("Product")).Orientation =
                Excel.XlPivotFieldOrientation.xlRowField;
            ((Excel.PivotField)pivotTable.PivotFields("Region")).Orientation =
                Excel.XlPivotFieldOrientation.xlColumnField;
            ((Excel.PivotField)pivotTable.PivotFields("Sales")).Orientation =
                Excel.XlPivotFieldOrientation.xlDataField;
            // Configure grand totals and formatting
            pivotTable.RowGrand = true;
            pivotTable.ColumnGrand = true;
            // Save the Excel file
            workbook.SaveAs("pivot_interop.xlsx");
            workbook.Close();
            excelApp.Quit();
            // Critical: Release COM objects to avoid errors
            #if WINDOWS
            Marshal.ReleaseComObject(pivotTable);
            Marshal.ReleaseComObject(pivotSheet);
            Marshal.ReleaseComObject(dataSheet);
            Marshal.ReleaseComObject(workbook);
            Marshal.ReleaseComObject(excelApp);
            #endif
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

このコードは Excel アプリケーションを作成し、ヘッダ行を含むソースデータでワークシートを追加し、ピボットキャッシュを確立し、PivotTable オブジェクトを構築し、フィールド配置を設定します。 クリーンアップセクションが重要です。 COM オブジェクトの解放に失敗するとメモリリークが発生します。 実行時エラーを防ぐために、各セル、範囲、およびワークシートを適切に廃棄する必要があります。

IronXL の代替アプローチ

IronXL は Excel ファイルフォーマットを直接操作することにより異なるアプローチを取ります。 プログラムで類似の分析結果を達成する方法は次のとおりです。

using IronXL;
using System.Linq;
class Program 
{
    static void Main(string[] args)
    {
        // Create workbook and add worksheet with data
        WorkBook workbook = WorkBook.Create();
        WorkSheet sheet = workbook.CreateWorkSheet("Data");
        // Add header row to define column structure
        sheet["A1"].Value = "Product";
        sheet["B1"].Value = "Region";
        sheet["C1"].Value = "Sales";
        // Add sample data to cells
        sheet["A2"].Value = "Widget";
        sheet["B2"].Value = "North";
        sheet["C2"].Value = 1500;
        // ... continue to add more data rows
        sheet["A3"].Value = "Laptop";
        sheet["B3"].Value = "South";
        sheet["C3"].Value = 1500;
        sheet["A4"].Value = "Phone";
        sheet["B4"].Value = "North";
        sheet["C4"].Value = 800;
        sheet["A5"].Value = "Phone";
        sheet["B5"].Value = "South";
        sheet["C5"].Value = 950;
        sheet["A6"].Value = "Tablet";
        sheet["B6"].Value = "East";
        sheet["C6"].Value = 600;
        sheet["A7"].Value = "Tablet";
        sheet["B7"].Value = "West";
        sheet["C7"].Value = 750;
        sheet["A8"].Value = "Monitor";
        sheet["B8"].Value = "North";
        sheet["C8"].Value = 400;
        sheet["A9"].Value = "Monitor";
        sheet["B9"].Value = "South";
        sheet["C9"].Value = 500;
        sheet["A10"].Value = "Keyboard";
        sheet["B10"].Value = "East";
        sheet["C10"].Value = 300;
        // Create summary analysis worksheet
        var summarySheet = workbook.CreateWorkSheet("Summary");
        // Group and calculate aggregated data
        var data = sheet["A1:C10"].ToDataTable(true);
        var productSummary = data.AsEnumerable()
            .GroupBy(row => row.Field<string>("Product"))
            .Select((group, index) => new {
                Product = group.Key,
                TotalSales = group.Sum(r => Convert.ToDecimal(r["Sales"])),
                Count = group.Count(),
                RowIndex = index + 2
            });
        // Write column headers for summary
        summarySheet["A1"].Value = "Product Summary";
        summarySheet["A2"].Value = "Product";
        summarySheet["B2"].Value = "Total Sales";
        summarySheet["C2"].Value = "Count";
        // Export results to cells
        foreach (var item in productSummary)
        {
            summarySheet[$"A{item.RowIndex + 1}"].Value = item.Product;
            summarySheet[$"B{item.RowIndex + 1}"].Value = item.TotalSales;
            summarySheet[$"C{item.RowIndex + 1}"].Value = item.Count;
        }
        // Apply number formatting and style
        summarySheet["B:B"].FormatString = "$#,##0.00";
        // Save the xlsx file
        workbook.SaveAs("analysis_ironxl.xlsx");
    }
}
using IronXL;
using System.Linq;
class Program 
{
    static void Main(string[] args)
    {
        // Create workbook and add worksheet with data
        WorkBook workbook = WorkBook.Create();
        WorkSheet sheet = workbook.CreateWorkSheet("Data");
        // Add header row to define column structure
        sheet["A1"].Value = "Product";
        sheet["B1"].Value = "Region";
        sheet["C1"].Value = "Sales";
        // Add sample data to cells
        sheet["A2"].Value = "Widget";
        sheet["B2"].Value = "North";
        sheet["C2"].Value = 1500;
        // ... continue to add more data rows
        sheet["A3"].Value = "Laptop";
        sheet["B3"].Value = "South";
        sheet["C3"].Value = 1500;
        sheet["A4"].Value = "Phone";
        sheet["B4"].Value = "North";
        sheet["C4"].Value = 800;
        sheet["A5"].Value = "Phone";
        sheet["B5"].Value = "South";
        sheet["C5"].Value = 950;
        sheet["A6"].Value = "Tablet";
        sheet["B6"].Value = "East";
        sheet["C6"].Value = 600;
        sheet["A7"].Value = "Tablet";
        sheet["B7"].Value = "West";
        sheet["C7"].Value = 750;
        sheet["A8"].Value = "Monitor";
        sheet["B8"].Value = "North";
        sheet["C8"].Value = 400;
        sheet["A9"].Value = "Monitor";
        sheet["B9"].Value = "South";
        sheet["C9"].Value = 500;
        sheet["A10"].Value = "Keyboard";
        sheet["B10"].Value = "East";
        sheet["C10"].Value = 300;
        // Create summary analysis worksheet
        var summarySheet = workbook.CreateWorkSheet("Summary");
        // Group and calculate aggregated data
        var data = sheet["A1:C10"].ToDataTable(true);
        var productSummary = data.AsEnumerable()
            .GroupBy(row => row.Field<string>("Product"))
            .Select((group, index) => new {
                Product = group.Key,
                TotalSales = group.Sum(r => Convert.ToDecimal(r["Sales"])),
                Count = group.Count(),
                RowIndex = index + 2
            });
        // Write column headers for summary
        summarySheet["A1"].Value = "Product Summary";
        summarySheet["A2"].Value = "Product";
        summarySheet["B2"].Value = "Total Sales";
        summarySheet["C2"].Value = "Count";
        // Export results to cells
        foreach (var item in productSummary)
        {
            summarySheet[$"A{item.RowIndex + 1}"].Value = item.Product;
            summarySheet[$"B{item.RowIndex + 1}"].Value = item.TotalSales;
            summarySheet[$"C{item.RowIndex + 1}"].Value = item.Count;
        }
        // Apply number formatting and style
        summarySheet["B:B"].FormatString = "$#,##0.00";
        // Save the xlsx file
        workbook.SaveAs("analysis_ironxl.xlsx");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

この IronXL の例は、ワークブックを作成し、ワークシートを追加し、データでセルを埋め、集計分析を実行する方法を示しています。 コードは製品ごとにデータをグループ化し、合計とカウントを計算し、サマリー レポートを作成します。 COM オブジェクトの管理が不要で、メソッドはメモリを自動的に処理する .NET コレクションでわかりやすく、

出力

!C# で Excel ピボットテーブルを作成する方法: 図 6 - IronXL の出力

!C# で Excel ピボットテーブルを作成する方法: 図 7 - サマリー出力

重要な違いと考慮事項

配備要件

Excel Interop には次のものが必要です:

  • Microsoft Excel インストールと有効なライセンス
  • Windows オペレーティング システム
  • 適切な COM 許可と設定
  • Office 自動化用サーバー構成 IronXL には次のものが必要です:

  • IronXL ライブラリ パッケージのみ
  • .NET をサポートする任意のプラットフォーム上で動作
  • Office インストールやライセンスは不要
  • 簡略化された配備プロセス

!C# で Excel ピボットテーブルを作成する方法: 図 8 - 機能

コードの品質とメンテナンス

Interop では、COM オブジェクトを注意深く管理して、メモリリークやエラーを防ぐ必要があります。 作成した各 Excel オブジェクトは、正しい方法で明示的に解放する必要があります。 IronXL は、標準的な .NET オブジェクトを使用し、自動ガベージコレクションを備えているため、リソース問題のリスクを減らします。

エラーハンドリング

Interop でのエラーは、Excel の利用可能性、バージョン違い、または COM 障害に関連することが多いです。 IronXL のエラーは標準の .NET 例外であり、デバッグをより簡単にします。 COM 固有の問題を心配せずに、馴染みのある try-catch パターンを利用できます。

ベストプラクティスと推奨事項

Excel Interop を選ぶとき:

  • すべてのフォーマットオプションを備えた正確な Excel ピボットテーブル機能が必要な場合
  • システムで Excel の利用が保証されている場合
  • Windows デスクトップ アプリケーションのみで作業している場合
  • 既存のコード要件 IronXL を選ぶとき:

  • サーバーアプリケーションまたは Web ソリューションを構築する場合
  • クロスプラットフォームの互換性が必要な場合
  • COM オーバーヘッドなしで信頼性の高いパフォーマンスが必要な場合
  • コンテナまたはクラウド環境へ配備する場合

IronXL ドキュメント を訪問して実装に関する詳細情報を学んでください。 質問がある場合やサポートが必要な場合は、Iron Software チームにお問い合わせください。

結論

C# Interop は Excel のピボットテーブル機能への直接アクセスを提供しますが、配備の制限や複雑さがあります。 IronXL は、Excel ファイル操作を簡素化し、.NET をサポートする任意の場所で実行するための柔軟性を提供する現代的な代替手段を提供します。

新しいアプリケーションを構築するか、既存のソリューションを近代化している開発者にとって、IronXL のアプローチは COM InterOp のオーバーヘッドを排除し、強力なデータ操作機能を提供します。 Excel データの読み取り、編集、またはエクスポートが必要な場合、IronXL はよりクリーンなソリューションを提供します。

IronXL の無料トライアル で違いを体験するか、チュートリアルを探索してより多くの例を確認してください。 配備の準備はできていますか? ライセンスオプションを表示して、作業に最適なパッケージを選択してください。

よくある質問

ピボットテーブルを作成する際にIronXLがExcel Interopよりも優れている理由は何ですか?

IronXLは、使用の容易さ、優れたパフォーマンス、およびサーバーにExcelをインストールせずにピボットテーブルを作成できる能力など、Excel Interopに比べて大きな利点を提供します。

Excel Interopを使用せずにC#でExcelピボットテーブルを作成できますか?

はい、IronXLを使用することでExcel Interopの現代的で効率的な代替手段を提供することで、C#でExcelピボットテーブルを作成できます。

IronXLを使用するのにMicrosoft Excelをインストールする必要がありますか?

いいえ、IronXLはあなたのシステムにMicrosoft Excelをインストールする必要がないため、Excelファイルの作成と管理のための柔軟なソリューションとなっています。

IronXLを使用してExcelでピボットテーブルを作成するための手順は何ですか?

IronXLを使用してピボットテーブルを作成するには、最初にExcelファイルをロードし、データ範囲を指定し、ピボットテーブルのフィールドを定義し、その後ピボットテーブルを生成します。IronXLの包括的なAPIは、このプロセスを簡単にします。

IronXLはピボットテーブル以外のExcel機能もサポートしていますか?

はい、IronXLは、Excelファイルの読み取りおよび書き込み、セルのフォーマット、計算の実行など、多岐にわたるExcel機能をサポートしています。

IronXLはピボットテーブルを作成する際に大量のデータセットをどのように処理しますか?

IronXLは大量のデータセットを効率的に処理するように設計されており、膨大なデータでも迅速かつ信頼性のあるピボットテーブルを作成します。

IronXLをクラウドベースのアプリケーションに使用することはできますか?

はい、IronXLはクラウドベースのアプリケーションに統合可能で、クラウドでExcelファイルを管理するためのシームレスなソリューションを提供します。

IronXLはピボットテーブルの作成にどのプログラミング言語をサポートしていますか?

IronXLは主にC#をサポートしており、これは.NETアプリケーション内でピボットテーブルを作成し、その他のExcel操作を実行するのを容易にします。

IronXLを使用する方法を学ぶためのチュートリアルはありますか?

はい、Iron Softwareはウェブサイトで包括的なドキュメントとチュートリアルを提供しており、ユーザーがIronXLを効果的に使用する方法を学ぶのを助けます。

IronXLの利用可能なライセンスオプションは何ですか?

IronXLは、さまざまなプロジェクトのニーズと規模に応じて、無料および有料の階層を含むさまざまなライセンスオプションを提供しています。

Curtis Chau
テクニカルライター

Curtis Chauは、カールトン大学でコンピュータサイエンスの学士号を取得し、Node.js、TypeScript、JavaScript、およびReactに精通したフロントエンド開発を専門としています。直感的で美しいユーザーインターフェースを作成することに情熱を持ち、Curtisは現代のフレームワークを用いた開発や、構造の良い視覚的に魅力的なマニュアルの作成を楽しんでいます。

開発以外にも、CurtisはIoT(Internet of Things)への強い関心を持ち、ハードウェアとソフトウェアの統合方法を模索しています。余暇には、ゲームをしたりDiscordボットを作成したりして、技術に対する愛情と創造性を組み合わせています。