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

IronXLを使って C# で Excel のピボットテーブルを作成する方法

Excel でプログラムによってピボット テーブルを生成するには、Office 依存関係を持つ C# 相互運用性 か、独立して動作するIronXLなどの最新ライブラリが必要です。このチュートリアルでは、両方のアプローチについて説明し、なぜ最新パスの方が適しているかを具体的に示します。

これまで、サーバー側またはクロスプラットフォーム for .NETコードでピボット スタイルのレポートを構築するのは困難でした。 従来の COM 相互運用ルートでは、完全な Office がインストールされた Windows マシンに縛られ、COM クリーンアップ呼び出しを 1 回でも見逃すとメモリ リークが発生し、Linux または Docker コンテナーに展開しようとした瞬間に機能しなくなります。 最新の代替手段 ( IronXLと LINQ を使用して集計ロジックを記述する) は、 .NET が実行される場所であればどこでも実行でき、Office ライセンスは必要なく、クリーンで読みやすいコードが得られます。

このガイドでは、両方の手法について詳しく説明します。 生の Interop アプローチを確認し、それがなぜ脆弱になるのかを正確に理解した上で、C# でIronXL を使用して同じピボット スタイルのサマリー シートを構築します。 また、実際のピボット テーブルの更新のように動作するライブの自動更新サマリーに Excel の数式を使用する方法についても説明します。

Excel ピボット テーブルとは何ですか?

ピボット テーブルは、スプレッドシート ソフトウェアの最も強力な分析ツールの 1 つです。 行をグループ化し、値を集計し、結果をクロス集計レイアウトに投影することで、大規模なデータ セットを要約します。数式を 1 つも手動で記述する必要はありません。 Microsoft の公式ピボット テーブル ドキュメントには、 Excel 自体の内部でこの機能が実行する内容の詳細な概要が記載されています。

ピボット テーブルは、Microsoft Excel、Google Sheets、Apple Numbers、その他ほとんどのスプレッドシート ツールに表示されます。 基本的な概念は常に同じです。行フィールド、列フィールド、値フィールドを定義すると、ツールによって要約マトリックスが作成されます。 基になるデータが変更されると、ピボット テーブルを更新すると、概要が自動的に更新されます。

C# サーバー側コードには、大きく分けて 2 つのオプションがあります。

  • C# 相互運用性 - COM を介して実行中の Excel プロセスを自動化し、XLSX ファイル内に本物のネイティブ ピボット テーブル オブジェクトを作成します。
  • LINQ 集計を使用したIronXL - ワークブックをメモリに読み込み、マネージ.NETコードで同じ集計を計算し、結果を新しいワークシートに書き込みます。

どちらのオプションでも、便利な出力が生成されます。 しかし、最新の展開環境で確実に機能するのはそのうちの 1 つだけです。

C# 相互運用性 を使用してピボット テーブルを作成する方法

C# Excel Interop を使用すると、COM オートメーションを通じて Excel のネイティブ ピボット テーブル機能に直接アクセスできます。 Excel.Application オブジェクトを作成し、ワークブックを開いて、データ範囲を指すピボット キャッシュを定義し、行フィールド、列フィールド、およびデータ フィールドを構成します。

相互運用ピボットテーブルコードの設定方法

using Excel = Microsoft.Office.Interop.Excel;
using System.Runtime.InteropServices;

// Create Excel application instance
Excel.Application xlApp = new Excel.Application();
Excel.Workbook xlWorkbook = xlApp.Workbooks.Open(@"C:\Data\SalesData.xlsx");
Excel.Worksheet xlSheet = (Excel.Worksheet)xlWorkbook.Sheets[1];
Excel.Worksheet xlPivotSheet = (Excel.Worksheet)xlWorkbook.Sheets.Add();

// Define data range for pivot table
Excel.Range dataRange = xlSheet.UsedRange;

// Create pivot cache and pivot table
Excel.PivotCache pivotCache = xlWorkbook.PivotCaches().Create(
    Excel.XlPivotTableSourceType.xlDatabase,
    dataRange,
    Type.Missing);
Excel.PivotTable pivotTable = pivotCache.CreatePivotTable(
    xlPivotSheet.Cells[3, 1],
    "SalesPivot",
    Type.Missing,
    Type.Missing);

// Configure pivot table fields
Excel.PivotField productField = (Excel.PivotField)pivotTable.PivotFields("Product");
productField.Orientation = Excel.XlPivotFieldOrientation.xlRowField;
productField.Position = 1;

Excel.PivotField regionField = (Excel.PivotField)pivotTable.PivotFields("Region");
regionField.Orientation = Excel.XlPivotFieldOrientation.xlColumnField;
regionField.Position = 1;

Excel.PivotField salesField = (Excel.PivotField)pivotTable.PivotFields("Sales");
pivotTable.AddDataField(salesField, "Sum of Sales", Excel.XlConsolidationFunction.xlSum);

// Save and cleanup
xlWorkbook.SaveAs(@"C:\Data\PivotReport.xlsx");
xlWorkbook.Close();
xlApp.Quit();

// Release COM objects to prevent memory leaks
Marshal.ReleaseComObject(pivotTable);
Marshal.ReleaseComObject(pivotCache);
Marshal.ReleaseComObject(xlPivotSheet);
Marshal.ReleaseComObject(xlSheet);
Marshal.ReleaseComObject(xlWorkbook);
Marshal.ReleaseComObject(xlApp);
using Excel = Microsoft.Office.Interop.Excel;
using System.Runtime.InteropServices;

// Create Excel application instance
Excel.Application xlApp = new Excel.Application();
Excel.Workbook xlWorkbook = xlApp.Workbooks.Open(@"C:\Data\SalesData.xlsx");
Excel.Worksheet xlSheet = (Excel.Worksheet)xlWorkbook.Sheets[1];
Excel.Worksheet xlPivotSheet = (Excel.Worksheet)xlWorkbook.Sheets.Add();

// Define data range for pivot table
Excel.Range dataRange = xlSheet.UsedRange;

// Create pivot cache and pivot table
Excel.PivotCache pivotCache = xlWorkbook.PivotCaches().Create(
    Excel.XlPivotTableSourceType.xlDatabase,
    dataRange,
    Type.Missing);
Excel.PivotTable pivotTable = pivotCache.CreatePivotTable(
    xlPivotSheet.Cells[3, 1],
    "SalesPivot",
    Type.Missing,
    Type.Missing);

// Configure pivot table fields
Excel.PivotField productField = (Excel.PivotField)pivotTable.PivotFields("Product");
productField.Orientation = Excel.XlPivotFieldOrientation.xlRowField;
productField.Position = 1;

Excel.PivotField regionField = (Excel.PivotField)pivotTable.PivotFields("Region");
regionField.Orientation = Excel.XlPivotFieldOrientation.xlColumnField;
regionField.Position = 1;

Excel.PivotField salesField = (Excel.PivotField)pivotTable.PivotFields("Sales");
pivotTable.AddDataField(salesField, "Sum of Sales", Excel.XlConsolidationFunction.xlSum);

// Save and cleanup
xlWorkbook.SaveAs(@"C:\Data\PivotReport.xlsx");
xlWorkbook.Close();
xlApp.Quit();

// Release COM objects to prevent memory leaks
Marshal.ReleaseComObject(pivotTable);
Marshal.ReleaseComObject(pivotCache);
Marshal.ReleaseComObject(xlPivotSheet);
Marshal.ReleaseComObject(xlSheet);
Marshal.ReleaseComObject(xlWorkbook);
Marshal.ReleaseComObject(xlApp);
$vbLabelText   $csharpLabel

この Interop の例では、Product を行に、Region を列に、Sales をデータ領域に合計した Excel ネイティブのピボット・テーブルを作成します。 XLSX ファイル内に実際のピボット テーブル オブジェクトが生成されますが、Microsoft Office がインストールされている必要があり、COM オブジェクトを慎重に管理する必要があります。 1 回の Marshal.ReleaseComObject 呼び出しを見逃すと、タスク マネージャーに古い Excel プロセスが蓄積されます。

コードを書く前にIronXLをインストールする方法

IronXLアプローチに進む前に、 NuGetパッケージ マネージャーを使用してライブラリをインストールします。

Install-Package IronXl.Excel
dotnet add package IronXl.Excel
Install-Package IronXl.Excel
dotnet add package IronXl.Excel
SHELL

サーバー、コンテナ、開発マシンにOfficeをインストールする必要はありません。IronXLは、XLSX、XLS、CSVファイルの読み取りと書き込みを、マネージド.NETメモリ内で完全に実行します。

C#相互運用はどのような問題を引き起こしますか?

Interop アプローチには、実際の展開で急速に複雑化するいくつかの重大な課題があります。 Stack Overflow やその他のプログラミング リソースがこれを推奨し続けているのは、多くのスレッドが 2000 年代初頭に書かれ、その後ロックされているため、アドバイスが時間的に固定されているからです。

展開の依存関係- 運用サーバーや CI/CD ビルド エージェントなど、コードを実行するすべてのマシンに、Microsoft Office のライセンス コピーがインストールされている必要があります。 これにより、ライセンス コストと展開の複雑さの両方が増加しますが、これは最新の代替手段を使用すれば完全に回避できます。

メモリ管理の負担- COM オブジェクトは、Marshal.ReleaseComObject() を使用して明示的に解放する必要があります。 Stack Overflow に詳細に文書化されているように、オブジェクトが 1 つでも不足すると、Excel プロセスがメモリ内で無期限に停止します。 長時間実行されるサービスまたはASP.NET Web アプリケーションでは、これは重大なリソース リークになります。

プラットフォームの制限- Interop は、Office がインストールされている Windows でのみ機能します。 Linux、macOS、Docker コンテナー、または Azure Functions や AWS Lambda などのサーバーレス プラットフォームでは実行できません。 これにより、最新のクラウドネイティブ アーキテクチャが完全にブロックされます。

パフォーマンスのボトルネック- Excelアプリケーションインスタンスの起動は遅く、多くのリソースを消費します。数十、数百のレポートを生成する必要があるサーバーサイドのバッチ処理では、この起動オーバーヘッドが深刻なスループットの制約となります。

バージョン互換性の脆弱性- Office のバージョンによって COM インターフェイスが若干異なります。 Office 2019 に対して動作するコードは、Office 2016 または Microsoft 365 に対しては異なる動作をする場合があります。また、展開時にバージョンを固定する方法はありません。 Office Interop アセンブリに関する Microsoft のドキュメントでは、これらのバージョン管理の制約が既知の制限として記載されています。

CI/CD の非互換性- ほとんどの継続的インテグレーション環境には Office がインストールされていません。 ピボット テーブル生成コードをテストするには、COM レイヤー全体をモックするか、ライセンスされた Office インストールを使用して特別な Windows エージェントを維持する必要があります。

.NET 6 以降 ( .NET 10 を含む) を対象とする新しい.NETアプリケーションの場合、これらの制約により、相互運用性は現実的な選択肢ではありません。

IronXL は相互運用性なしでどのようにピボット テーブルを作成しますか?

IronXL はピボット テーブルの作成に異なるアプローチを採用しています。 COM を介して外部の Excel プロセスを制御するのではなく、 IronXL はワークブックをマネージ.NETメモリに読み込み、セルの値、数式、ワークシート構造に直接アクセスできるようにします。 次に、標準の LINQ クエリを使用してピボット スタイルの集計を構築し、結果を新しいワークシートに書き戻します。

IronXLとLINQを使ってクロス集計サマリーを作成する方法

次の例では、売上データ ワークブックを読み込み、製品別地域クロス集計を計算し、概要を新しいワークシートに書き込みます。これらはすべて Office に依存せずに実行されます。

using IronXL;
using System.Linq;
using System.Data;

// Load Excel file -- no Office installation required
WorkBook workbook = WorkBook.Load("SalesData.xlsx");
WorkSheet dataSheet = workbook.WorkSheets[0];

// Convert to DataTable for flexible LINQ manipulation
var dataTable = dataSheet.ToDataTable(true); // true = first row as column headers

// Build pivot-style aggregation using LINQ grouping
var pivotData = dataTable.AsEnumerable()
    .GroupBy(row => new {
        Product = row["Product"].ToString(),
        Region = row["Region"].ToString()
    })
    .Select(g => new {
        Product = g.Key.Product,
        Region = g.Key.Region,
        TotalSales = g.Sum(row => Convert.ToDecimal(row["Sales"])),
        AverageSale = g.Average(row => Convert.ToDecimal(row["Sales"])),
        Count = g.Count()
    });

// Create the pivot report worksheet
WorkSheet pivotSheet = workbook.CreateWorkSheet("PivotReport");

// Get distinct row and column values
var products = pivotData.Select(p => p.Product).Distinct().OrderBy(p => p).ToList();
var regions  = pivotData.Select(p => p.Region).Distinct().OrderBy(r => r).ToList();

// Write column headers
pivotSheet["A1"].Value = "Product / Region";
for (int c = 0; c < regions.Count; c++)
{
    pivotSheet[$"{(char)('B' + c)}1"].Value = regions[c];
}

// Populate data rows
for (int r = 0; r < products.Count; r++)
{
    pivotSheet[$"A{r + 2}"].Value = products[r];
    for (int c = 0; c < regions.Count; c++)
    {
        var sales = pivotData
            .Where(p => p.Product == products[r] && p.Region == regions[c])
            .Select(p => p.TotalSales)
            .FirstOrDefault();
        pivotSheet[$"{(char)('B' + c)}{r + 2}"].Value = sales;
    }
}

// Add a totals row using Excel SUM formulas
int totalRow = products.Count + 2;
pivotSheet[$"A{totalRow}"].Value = "Total";
for (int c = 0; c < regions.Count; c++)
{
    char col = (char)('B' + c);
    pivotSheet[$"{col}{totalRow}"].Formula = $"=SUM({col}2:{col}{totalRow - 1})";
}

// Apply currency formatting to the data range
var dataRange = pivotSheet[$"B2:{(char)('B' + regions.Count - 1)}{totalRow}"];
dataRange.FormatString = "$#,##0.00";

workbook.SaveAs("PivotReport.xlsx");
using IronXL;
using System.Linq;
using System.Data;

// Load Excel file -- no Office installation required
WorkBook workbook = WorkBook.Load("SalesData.xlsx");
WorkSheet dataSheet = workbook.WorkSheets[0];

// Convert to DataTable for flexible LINQ manipulation
var dataTable = dataSheet.ToDataTable(true); // true = first row as column headers

// Build pivot-style aggregation using LINQ grouping
var pivotData = dataTable.AsEnumerable()
    .GroupBy(row => new {
        Product = row["Product"].ToString(),
        Region = row["Region"].ToString()
    })
    .Select(g => new {
        Product = g.Key.Product,
        Region = g.Key.Region,
        TotalSales = g.Sum(row => Convert.ToDecimal(row["Sales"])),
        AverageSale = g.Average(row => Convert.ToDecimal(row["Sales"])),
        Count = g.Count()
    });

// Create the pivot report worksheet
WorkSheet pivotSheet = workbook.CreateWorkSheet("PivotReport");

// Get distinct row and column values
var products = pivotData.Select(p => p.Product).Distinct().OrderBy(p => p).ToList();
var regions  = pivotData.Select(p => p.Region).Distinct().OrderBy(r => r).ToList();

// Write column headers
pivotSheet["A1"].Value = "Product / Region";
for (int c = 0; c < regions.Count; c++)
{
    pivotSheet[$"{(char)('B' + c)}1"].Value = regions[c];
}

// Populate data rows
for (int r = 0; r < products.Count; r++)
{
    pivotSheet[$"A{r + 2}"].Value = products[r];
    for (int c = 0; c < regions.Count; c++)
    {
        var sales = pivotData
            .Where(p => p.Product == products[r] && p.Region == regions[c])
            .Select(p => p.TotalSales)
            .FirstOrDefault();
        pivotSheet[$"{(char)('B' + c)}{r + 2}"].Value = sales;
    }
}

// Add a totals row using Excel SUM formulas
int totalRow = products.Count + 2;
pivotSheet[$"A{totalRow}"].Value = "Total";
for (int c = 0; c < regions.Count; c++)
{
    char col = (char)('B' + c);
    pivotSheet[$"{col}{totalRow}"].Formula = $"=SUM({col}2:{col}{totalRow - 1})";
}

// Apply currency formatting to the data range
var dataRange = pivotSheet[$"B2:{(char)('B' + regions.Count - 1)}{totalRow}"];
dataRange.FormatString = "$#,##0.00";

workbook.SaveAs("PivotReport.xlsx");
$vbLabelText   $csharpLabel

これにより、ネイティブの Excel ピボット テーブルから取得されるものと同じクロス集計の概要が生成されます。 すべてのセル、数式、書式文字列をプログラムで完全に制御でき、COM オブジェクトをクリーンアップする必要はありません。

C# 相互運用性 とIronXLを使用して Excel でピボット テーブルを作成する方法: 画像 1 - 元の Excel ファイルと、セルが表示された作成されたピボット テーブル。

今IronXLを始めましょう。
green arrow pointer

Excel の数式を使用して動的な集計を作成するにはどうすればよいですか?

サマリーシートを常に最新の状態に保ち、ソース データが変更されるたびに自動的に再計算する必要がある場合は、 IronXL を使用すると、Excel の数式文字列をセルに直接書き込むことができます。 これにより、相互運用性への依存なしに、ピボット テーブルの自動更新と同様の動作が得られます。

ここで重要な機能は、SUMIFSCOUNTIFS です。 SUMIFS 複数の基準列条件に基づいて範囲を合計します。 COUNTIFS 一致する行をカウントします。 どちらも名前付きワークシートへの参照を受け入れるため、名前によって概要シートをソース データ シートに直接指定できます。

IronXLで数式ベースの集計を書く方法

using IronXL;
using System.Data;

string inputPath  = "SalesData.xlsx";
string outputPath = "DynamicSummary.xlsx";

WorkBook workbook  = WorkBook.Load(inputPath);
WorkSheet dataSheet = workbook.WorkSheets[0];

// Name the data sheet so formula references are stable
dataSheet.Name = "DataSheet";

// Convert to DataTable to enumerate unique product/region combinations
DataTable dataTable = dataSheet.ToDataTable(true);

WorkSheet summarySheet = workbook.CreateWorkSheet("DynamicSummary");

// Get unique product-region pairs
var uniqueCombos = dataTable.AsEnumerable()
    .Select(row => new {
        Product = row["Product"].ToString(),
        Region  = row["Region"].ToString()
    })
    .Distinct()
    .OrderBy(x => x.Product)
    .ThenBy(x => x.Region)
    .ToList();

// Header row
summarySheet["A1"].Value = "Product";
summarySheet["B1"].Value = "Region";
summarySheet["C1"].Value = "Total Sales";
summarySheet["D1"].Value = "Count";

// Populate rows with live SUMIFS / COUNTIFS formulas
for (int i = 0; i < uniqueCombos.Count; i++)
{
    int rowIndex = i + 2;
    var combo = uniqueCombos[i];

    summarySheet[$"A{rowIndex}"].Value = combo.Product;
    summarySheet[$"B{rowIndex}"].Value = combo.Region;

    summarySheet[$"C{rowIndex}"].Formula =
        $"=SUMIFS(DataSheet!C:C,DataSheet!A:A,\"{combo.Product}\",DataSheet!B:B,\"{combo.Region}\")";

    summarySheet[$"D{rowIndex}"].Formula =
        $"=COUNTIFS(DataSheet!A:A,\"{combo.Product}\",DataSheet!B:B,\"{combo.Region}\")";
}

// Grand total row
int totalRow = uniqueCombos.Count + 2;
summarySheet[$"A{totalRow}"].Value = "Total";
summarySheet[$"C{totalRow}"].Formula = $"=SUM(C2:C{totalRow - 1})";
summarySheet[$"D{totalRow}"].Formula = $"=SUM(D2:D{totalRow - 1})";

workbook.SaveAs(outputPath);
using IronXL;
using System.Data;

string inputPath  = "SalesData.xlsx";
string outputPath = "DynamicSummary.xlsx";

WorkBook workbook  = WorkBook.Load(inputPath);
WorkSheet dataSheet = workbook.WorkSheets[0];

// Name the data sheet so formula references are stable
dataSheet.Name = "DataSheet";

// Convert to DataTable to enumerate unique product/region combinations
DataTable dataTable = dataSheet.ToDataTable(true);

WorkSheet summarySheet = workbook.CreateWorkSheet("DynamicSummary");

// Get unique product-region pairs
var uniqueCombos = dataTable.AsEnumerable()
    .Select(row => new {
        Product = row["Product"].ToString(),
        Region  = row["Region"].ToString()
    })
    .Distinct()
    .OrderBy(x => x.Product)
    .ThenBy(x => x.Region)
    .ToList();

// Header row
summarySheet["A1"].Value = "Product";
summarySheet["B1"].Value = "Region";
summarySheet["C1"].Value = "Total Sales";
summarySheet["D1"].Value = "Count";

// Populate rows with live SUMIFS / COUNTIFS formulas
for (int i = 0; i < uniqueCombos.Count; i++)
{
    int rowIndex = i + 2;
    var combo = uniqueCombos[i];

    summarySheet[$"A{rowIndex}"].Value = combo.Product;
    summarySheet[$"B{rowIndex}"].Value = combo.Region;

    summarySheet[$"C{rowIndex}"].Formula =
        $"=SUMIFS(DataSheet!C:C,DataSheet!A:A,\"{combo.Product}\",DataSheet!B:B,\"{combo.Region}\")";

    summarySheet[$"D{rowIndex}"].Formula =
        $"=COUNTIFS(DataSheet!A:A,\"{combo.Product}\",DataSheet!B:B,\"{combo.Region}\")";
}

// Grand total row
int totalRow = uniqueCombos.Count + 2;
summarySheet[$"A{totalRow}"].Value = "Total";
summarySheet[$"C{totalRow}"].Formula = $"=SUM(C2:C{totalRow - 1})";
summarySheet[$"D{totalRow}"].Formula = $"=SUM(D2:D{totalRow - 1})";

workbook.SaveAs(outputPath);
$vbLabelText   $csharpLabel

これらの数式は、ソース データへのライブ接続を維持します。 誰かが DataSheet の値を更新すると、Excel は次に開いたときまたは更新したときに自動的に概要を再計算します。これにより、COM オートメーションを必要とせずに、ネイティブ ピボット テーブルの更新サイクルと同じ動作が実現します。

これを前の例で使用したのと同じ販売データ ワークブックに適用すると、出力は次のようになります。

C# 相互運用性 とIronXLを使用して Excel でピボット テーブルを作成する方法: 画像 2 - コンテキスト内に表示される C# の動的集計出力。

この数式ベースのアプローチでは、 IronXL のセル書式設定 APIを使用して、条件付き書式、データ バー、またはアイコン セットをサマリー セルに追加することも可能で、Excel UI で手作業を行わなくてもレポートを視覚的に明確にすることができます。

2 つのアプローチを比較するとどうなりますか?

アプローチを選択する前に、トレードオフを並べて比較検討すると役立ちます。以下の表は、本番環境 for .NET開発における最も重要な要素を示しています。

ピボットテーブル生成における C# 相互運用性 とIronXLの比較
アスペクト C# 相互運用性 IronXL
オフィス必須 はい - すべてのマシンに完全インストール いいえ - スタンドアロンNuGetパッケージ
プラットフォームサポート Windowsのみ Windows、Linux、macOS、Docker
メモリ管理 手動のCOMクリーンアップが必要 自動 .NET ガベージコレクション
展開の複雑さ 高 -- Office ライセンス + インストール 低 -- 単一の DLL 参照
パフォーマンス 遅い -- Excel プロセスの起動オーバーヘッド 高速 - メモリ内計算
クラウド対応 いいえ - Azure Functions、AWS Lambda でブロックされています はい - あらゆるクラウド プラットフォームで実行できます
ネイティブピボットテーブルオブジェクト はい - 完全な Excel ピボット テーブル いいえ - 集約ベースの同等物
開発速度 遅い -- COM の複雑さ 高速 - 流暢なマネージド API
IronWordを.NETプロジェクトにインストールし、Windows環境でWordドキュメントを作成・編集します。 限定的 -- COM バインディングの問題 完全版 - 最新 for .NETをターゲットにしています

Interop が明らかに有利な唯一のシナリオは、XLSX ファイルに埋め込まれたネイティブの Excel ピボット テーブル オブジェクトが特に必要な場合です。たとえば、下流のユーザーが Excel の組み込みピボット テーブル UI を使用して操作する必要がある場合 (ドリルダウン、フィルタリング、集計関数の対話的な変更など)。 他のすべてのシナリオでは、IronXL のアプローチの方が記述が速く、展開が簡単で、移植性がはるかに高くなります。

どのアプローチを選ぶべきか?

適切な選択は、展開環境とユーザーのニーズによって異なります。

次の場合にのみC# 相互運用性を選択します。

  • ユーザーは、Excel UI 内で対話的に操作できるネイティブの Excel ピボット テーブル オブジェクトを必要とします。
  • すべてのマシンにOfficeがインストールされていることを保証する、閉じたWindowsデスクトップ環境をターゲットにしている
  • すでに相互運用性に依存している従来 for .NET Frameworkコードを維持しており、現時点では書き換えが正当化されない場合

IronXLを選択する場合:

  • サーバー、コンテナ、または任意のクラウド環境(Azure、AWS、GCP)にデプロイしている
  • Linux、macOS、またはDockerベースのビルドのクロスプラットフォームサポートが必要です
  • COMライフサイクル管理なしで、クリーンで保守しやすいコードが欲しい
  • .NET 5、6、7、8、9、または10をターゲットにしている
  • サーバーインフラストラクチャ上のMicrosoft Officeライセンス料金を避けたい
  • ファイルごとにExcelプロセスを起動せずに、多数のワークブックを高速にバッチ処理する必要がある

現代 for .NETアプリケーションの大多数にとって、 IronXLは実用的な選択肢です。集計ベースの出力は、あらゆる実際のレポート要件を満たし、完全な移植性も実現します。

セルの書式設定、数式の評価、データの検証、グラフの生成など、さらに詳しい機能については、 IronXL のドキュメントIronXL の例ライブラリを参照してください。

今すぐIronXLを使い始めるにはどうすればいいですか?

IronXLライブラリはNuGetで入手でき、任意 for .NETプロジェクトに追加するのに 1 分もかかりません。

Install-Package IronXl.Excel
dotnet add package IronXl.Excel
Install-Package IronXl.Excel
dotnet add package IronXl.Excel
SHELL

インストールすると、既存のワークブックを読み込んだり、新しいワークブックを作成したり、セルの値を読み込んだり書き込んだり、数式を適用したり、書式文字列を設定したり、XLSX に保存したりできるようになります。これらはすべて、わかりやすく文書化された API によって実行できます。 COM や Office への依存関係はなく、特別なサーバー構成も必要ありません。

完全な API ドキュメントについては、 IronXLスタート ガイドC# Excel Interop 移行ガイド、およびIronXLコード例を参照してください。 IronXL比較記事で、 IronXL を他の Excel ライブラリと比較することもできます。

無料の試用ライセンスを使用すると、コミットする前に独自のプロジェクトで完全な機能をテストできます。 実稼働環境に展開する準備ができたら、商用IronXLライセンスにより試用版のウォーターマークが削除され、優先サポートが提供されます。 無料トライアルから始めて、クロスプラットフォームの Excel 自動化がどれだけ簡単になるかを確認してください。

よくある質問

Interop なしで C# を使用して Excel でピボット テーブルを作成するにはどうすればよいですか?

Office の依存関係に依存せずに強力なデータ操作機能を提供するIronXLを使用すると、相互運用性のない C# を使用して Excel でピボット テーブルを作成できます。

ピボット テーブルを生成するためにIronXLを使用する利点は何ですか?

IronXL を使用すると、開発者は Excel Interop に依存せずにピボット テーブルを生成できるため、Office をインストールする必要がなくなり、展開の複雑さが軽減されます。

IronXLは.NETアプリケーションと互換性がありますか?

はい、 IronXL は.NETアプリケーションと完全に互換性があり、ピボット テーブルの作成を含む Excel 操作用の使いやすい API を提供します。

IronXLではサーバーに Excel をインストールする必要がありますか?

いいえ、 IronXLはサーバーにExcelをインストールする必要はありません。IronXLは独立して機能するため、サーバーサイドアプリケーションにシームレスに統合できます。

IronXLを使用して Excel のデータを操作できますか?

はい、 IronXL は強力なデータ操作機能を提供しており、開発者はピボット テーブルの作成など、Excel データを作成、変更、分析できます。

開発者が従来の相互運用方法よりもIronXL を好むのはなぜでしょうか?

開発者は、Office への依存関係がなく、展開が簡単で、Excel 操作の機能が包括的であるため、従来の相互運用方法よりもIronXL を好む可能性があります。

IronXL はExcel データ操作にどのような機能を提供しますか?

IronXL は、Excel Interop を必要とせずに、Excel ファイルの読み取りと書き込み、スプレッドシートの作成と編集、ピボット テーブルの生成などの機能を提供します。

カーティス・チャウ
テクニカルライター

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

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

Iron Support Team

We're online 24 hours, 5 days a week.
Chat
Email
Call Me