Excel で相互運用性なしで C# を使ってピボット テーブルを作成する方法
C# を使用して Excel でピボットテーブルを作成するのは、適切なライブラリを選択すれば簡単です。Excel Interop はすべてのマシンに Office がインストールされている必要がありますが、 IronXL は.NETが動作する環境であればどこでも使用できます。このガイドでは、セットアップ、データ集計、フィールド構成、デプロイに関する考慮事項など、両方のアプローチを完全なコード例とともに解説し、プロジェクトに最適な選択ができるようにサポートします。

Excel InteropとIronXLの違いは何ですか?
コードを一行も書く前に、それぞれの方法が内部でどのような動作をするのかを理解しておくと役立ちます。 Excel InteropはCOM(コンポーネントオブジェクトモデル)を使用して、C#からMicrosoft Excelを直接操作します。 .NETプロセスは実行中のExcelインスタンスと通信するため、Excel自体がマシンにインストールされている必要があります。操作するすべてのオブジェクト(ワークブック、ワークシート、範囲、ピボットキャッシュなど)はCOMラッパーであり、プロセスリークを防ぐためにそれぞれ明示的に解放する必要があります。
IronXLは根本的に異なる道を歩んでいる。 Excelを一切起動することなく、 Open XMLファイル形式を直接読み書きします。 その結果、使い慣れたオブジェクトパターン、ガベージコレクションされたメモリ、そしてOfficeのインストールやライセンスへの依存がない、標準的な.NETライブラリが実現しました。 そのアーキテクチャにより、 IronXLはサーバーサイドのワークロード、Dockerコンテナ、Linuxホスト、および.NET 6、 .NET 8、または.NET 10のあらゆる環境に適しています。
| 基準 | Excel Interop | IronXL |
|---|---|---|
| オフィス勤務必須 | はい | なし |
| Windowsのみ | はい | いいえ、クロスプラットフォームではありません |
| メモリ管理 | 手動COMリリース | 自動(.NET GC) |
| サーバー展開 | 難しい | 分かりやすい |
| ネイティブピボットテーブル | 完全なExcelピボットAPI | LINQによるデータ集計 |
| ライセンスが必要です | オフィスライセンス | IronXLライセンスのみ |
.
各ライブラリをどのようにインストールしますか?
Excel Interopの設定
Excel Interop はNuGetパッケージとして提供されます。 プロジェクトで以下のいずれかを実行してください。
Install-Package Microsoft.Office.Interop.Excel
dotnet add package Microsoft.Office.Interop.Excel
Install-Package Microsoft.Office.Interop.Excel
dotnet add package Microsoft.Office.Interop.Excel
パッケージ単体では不十分であることに注意してください。対象のマシンには、対応するバージョンのMicrosoft Excelがインストールされ、適切なライセンスが付与されている必要があります。 その依存関係により、ほとんどのサーバー、コンテナ、クラウドのシナリオは除外されます。

IronXLの設定
追加のシステム要件なしでNuGet経由でIronXLをインストールできます。
Install-Package IronXL.Excel
dotnet add package IronXL.Excel
Install-Package IronXL.Excel
dotnet add package IronXL.Excel
インストール後、 .NETをサポートするあらゆるプラットフォームで、すぐにExcelファイルの読み書きを開始できます。 Officeライセンス不要、COM登録不要、サーバー設定不要。 オフラインインストールやプロジェクト参照の設定など、その他のオプションについては、IronXLのインストールガイドを参照してください。
.
C# Interopを使用してExcelのピボットテーブルを作成するにはどうすればよいですか?
Interop のピボット・テーブルのワークフローは、ソース範囲からピボット・キャッシュを作成し、別のワークシート上に PivotTable オブジェクトを構築し、フィールドの向きを構成するという厳格な順序に従っています。 以下の例では、 .NET 10 と互換性のあるトップレベルの C# ステートメントを使用しています。
using Excel = Microsoft.Office.Interop.Excel;
using System.Runtime.InteropServices;
// Launch Excel and set up workbooks
var excelApp = new Excel.Application();
excelApp.Visible = false;
var workbook = excelApp.Workbooks.Add();
var dataSheet = (Excel.Worksheet)workbook.Worksheets[1];
dataSheet.Name = "SalesData";
var pivotSheet = (Excel.Worksheet)workbook.Worksheets.Add();
pivotSheet.Name = "Pivot";
// Populate header row
dataSheet.Cells[1, 1] = "Product";
dataSheet.Cells[1, 2] = "Region";
dataSheet.Cells[1, 3] = "Sales";
// Add sample data rows
object[,] rows = {
{ "Laptop", "なしrth", 1200 },
{ "Laptop", "South", 1500 },
{ "Phone", "なしrth", 800 },
{ "Phone", "South", 950 },
{ "Tablet", "East", 600 },
{ "Tablet", "West", 750 },
{ "Monitor", "なしrth", 400 },
{ "Monitor", "South", 500 },
{ "Keyboard", "East", 300 },
};
for (int i = 0; i < rows.GetLength(0); i++)
{
dataSheet.Cells[i + 2, 1] = rows[i, 0];
dataSheet.Cells[i + 2, 2] = rows[i, 1];
dataSheet.Cells[i + 2, 3] = rows[i, 2];
}
// Build pivot cache from source range
Excel.Range dataRange = dataSheet.Range["A1:C10"];
Excel.PivotCache pivotCache = workbook.PivotCaches().Create(
Excel.XlPivotTableSourceType.xlDatabase, dataRange);
// Create the PivotTable on the pivot sheet
Excel.PivotTables pivotTables = (Excel.PivotTables)pivotSheet.PivotTables();
Excel.PivotTable pivotTable = pivotTables.Add(
pivotCache, pivotSheet.Range["A3"], "SalesPivot");
// Assign field orientations
((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;
// Enable grand totals
pivotTable.RowGrand = true;
pivotTable.ColumnGrand = true;
// Save and close
workbook.SaveAs(@"C:\output\pivot_interop.xlsx");
workbook.Close(false);
excelApp.Quit();
// Release every COM object -- skipping any of these causes Excel to stay in memory
Marshal.ReleaseComObject(pivotTable);
Marshal.ReleaseComObject(pivotTables);
Marshal.ReleaseComObject(pivotCache);
Marshal.ReleaseComObject(dataRange);
Marshal.ReleaseComObject(pivotSheet);
Marshal.ReleaseComObject(dataSheet);
Marshal.ReleaseComObject(workbook);
Marshal.ReleaseComObject(excelApp);
using Excel = Microsoft.Office.Interop.Excel;
using System.Runtime.InteropServices;
// Launch Excel and set up workbooks
var excelApp = new Excel.Application();
excelApp.Visible = false;
var workbook = excelApp.Workbooks.Add();
var dataSheet = (Excel.Worksheet)workbook.Worksheets[1];
dataSheet.Name = "SalesData";
var pivotSheet = (Excel.Worksheet)workbook.Worksheets.Add();
pivotSheet.Name = "Pivot";
// Populate header row
dataSheet.Cells[1, 1] = "Product";
dataSheet.Cells[1, 2] = "Region";
dataSheet.Cells[1, 3] = "Sales";
// Add sample data rows
object[,] rows = {
{ "Laptop", "なしrth", 1200 },
{ "Laptop", "South", 1500 },
{ "Phone", "なしrth", 800 },
{ "Phone", "South", 950 },
{ "Tablet", "East", 600 },
{ "Tablet", "West", 750 },
{ "Monitor", "なしrth", 400 },
{ "Monitor", "South", 500 },
{ "Keyboard", "East", 300 },
};
for (int i = 0; i < rows.GetLength(0); i++)
{
dataSheet.Cells[i + 2, 1] = rows[i, 0];
dataSheet.Cells[i + 2, 2] = rows[i, 1];
dataSheet.Cells[i + 2, 3] = rows[i, 2];
}
// Build pivot cache from source range
Excel.Range dataRange = dataSheet.Range["A1:C10"];
Excel.PivotCache pivotCache = workbook.PivotCaches().Create(
Excel.XlPivotTableSourceType.xlDatabase, dataRange);
// Create the PivotTable on the pivot sheet
Excel.PivotTables pivotTables = (Excel.PivotTables)pivotSheet.PivotTables();
Excel.PivotTable pivotTable = pivotTables.Add(
pivotCache, pivotSheet.Range["A3"], "SalesPivot");
// Assign field orientations
((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;
// Enable grand totals
pivotTable.RowGrand = true;
pivotTable.ColumnGrand = true;
// Save and close
workbook.SaveAs(@"C:\output\pivot_interop.xlsx");
workbook.Close(false);
excelApp.Quit();
// Release every COM object -- skipping any of these causes Excel to stay in memory
Marshal.ReleaseComObject(pivotTable);
Marshal.ReleaseComObject(pivotTables);
Marshal.ReleaseComObject(pivotCache);
Marshal.ReleaseComObject(dataRange);
Marshal.ReleaseComObject(pivotSheet);
Marshal.ReleaseComObject(dataSheet);
Marshal.ReleaseComObject(workbook);
Marshal.ReleaseComObject(excelApp);
Imports Excel = Microsoft.Office.Interop.Excel
Imports System.Runtime.InteropServices
' Launch Excel and set up workbooks
Dim excelApp As New Excel.Application()
excelApp.Visible = False
Dim workbook As Excel.Workbook = excelApp.Workbooks.Add()
Dim dataSheet As Excel.Worksheet = CType(workbook.Worksheets(1), Excel.Worksheet)
dataSheet.Name = "SalesData"
Dim pivotSheet As Excel.Worksheet = CType(workbook.Worksheets.Add(), Excel.Worksheet)
pivotSheet.Name = "Pivot"
' Populate header row
dataSheet.Cells(1, 1) = "Product"
dataSheet.Cells(1, 2) = "Region"
dataSheet.Cells(1, 3) = "Sales"
' Add sample data rows
Dim rows As Object(,) = {
{"Laptop", "North", 1200},
{"Laptop", "South", 1500},
{"Phone", "North", 800},
{"Phone", "South", 950},
{"Tablet", "East", 600},
{"Tablet", "West", 750},
{"Monitor", "North", 400},
{"Monitor", "South", 500},
{"Keyboard", "East", 300}
}
For i As Integer = 0 To rows.GetLength(0) - 1
dataSheet.Cells(i + 2, 1) = rows(i, 0)
dataSheet.Cells(i + 2, 2) = rows(i, 1)
dataSheet.Cells(i + 2, 3) = rows(i, 2)
Next
' Build pivot cache from source range
Dim dataRange As Excel.Range = dataSheet.Range("A1:C10")
Dim pivotCache As Excel.PivotCache = workbook.PivotCaches().Create(
Excel.XlPivotTableSourceType.xlDatabase, dataRange)
' Create the PivotTable on the pivot sheet
Dim pivotTables As Excel.PivotTables = CType(pivotSheet.PivotTables(), Excel.PivotTables)
Dim pivotTable As Excel.PivotTable = pivotTables.Add(
pivotCache, pivotSheet.Range("A3"), "SalesPivot")
' Assign field orientations
CType(pivotTable.PivotFields("Product"), Excel.PivotField).Orientation =
Excel.XlPivotFieldOrientation.xlRowField
CType(pivotTable.PivotFields("Region"), Excel.PivotField).Orientation =
Excel.XlPivotFieldOrientation.xlColumnField
CType(pivotTable.PivotFields("Sales"), Excel.PivotField).Orientation =
Excel.XlPivotFieldOrientation.xlDataField
' Enable grand totals
pivotTable.RowGrand = True
pivotTable.ColumnGrand = True
' Save and close
workbook.SaveAs("C:\output\pivot_interop.xlsx")
workbook.Close(False)
excelApp.Quit()
' Release every COM object -- skipping any of these causes Excel to stay in memory
Marshal.ReleaseComObject(pivotTable)
Marshal.ReleaseComObject(pivotTables)
Marshal.ReleaseComObject(pivotCache)
Marshal.ReleaseComObject(dataRange)
Marshal.ReleaseComObject(pivotSheet)
Marshal.ReleaseComObject(dataSheet)
Marshal.ReleaseComObject(workbook)
Marshal.ReleaseComObject(excelApp)
すべてのCOMラッパーは、一致するMarshal.ReleaseComObject呼び出しが必要です。 参照が1つでも欠けていると、Excelプロセスがバックグラウンドで継続し、ホストプロセスが終了するまでメモリとファイルハンドルを消費し続けます。 このクリーンアップ作業の負担は、スプレッドシート操作の複雑さに比例して大きくなります。
IronXLで同じ結果を得るにはどうすればよいですか?
IronXLはInteropのようにネイティブなピボットテーブルAPIを公開していません。Open XMLピボットフォーマットには数百ものXML属性があり、ほとんどのビジネス要件はプレーンなC#で記述された明示的なLINQ集計によってより確実に満たされます。 出力は、Excelがピボットキャッシュを更新することなく、ファイルを開いたときに正しく再計算される、すっきりとした要約シートです。
using IronXL;
using System.Data;
// Create workbook and populate source data
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet dataSheet = workbook.CreateWorkSheet("SalesData");
dataSheet["A1"].Value = "Product";
dataSheet["B1"].Value = "Region";
dataSheet["C1"].Value = "Sales";
object[,] rows = {
{ "Laptop", "なしrth", 1200 },
{ "Laptop", "South", 1500 },
{ "Phone", "なしrth", 800 },
{ "Phone", "South", 950 },
{ "Tablet", "East", 600 },
{ "Tablet", "West", 750 },
{ "Monitor", "なしrth", 400 },
{ "Monitor", "South", 500 },
{ "Keyboard", "East", 300 },
};
for (int i = 0; i < rows.GetLength(0); i++)
{
dataSheet[$"A{i + 2}"].Value = rows[i, 0];
dataSheet[$"B{i + 2}"].Value = rows[i, 1];
dataSheet[$"C{i + 2}"].Value = rows[i, 2];
}
// Aggregate data with LINQ -- equivalent to a pivot table row/column/value layout
DataTable table = dataSheet["A1:C10"].ToDataTable(true);
var summary = table.AsEnumerable()
.GroupBy(row => row.Field<string>("Product"))
.Select((group, idx) => new
{
Product = group.Key,
TotalSales = group.Sum(r => Convert.ToDecimal(r["Sales"])),
RegionCount = group.Select(r => r.Field<string>("Region")).Distinct().Count(),
RowIndex = idx + 2
})
.OrderByDescending(x => x.TotalSales);
// Write the summary sheet
WorkSheet summarySheet = workbook.CreateWorkSheet("Summary");
summarySheet["A1"].Value = "Product";
summarySheet["B1"].Value = "Total Sales";
summarySheet["C1"].Value = "Regions";
foreach (var item in summary)
{
summarySheet[$"A{item.RowIndex}"].Value = item.Product;
summarySheet[$"B{item.RowIndex}"].Value = (double)item.TotalSales;
summarySheet[$"C{item.RowIndex}"].Value = item.RegionCount;
}
// Apply currency format to the sales column
summarySheet["B:B"].FormatString = "$#,##0.00";
// Bold the header row
summarySheet["A1:C1"].Style.Font.Bold = true;
// Save -- no COM cleanup needed
workbook.SaveAs(@"C:\output\analysis_ironxl.xlsx");
using IronXL;
using System.Data;
// Create workbook and populate source data
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet dataSheet = workbook.CreateWorkSheet("SalesData");
dataSheet["A1"].Value = "Product";
dataSheet["B1"].Value = "Region";
dataSheet["C1"].Value = "Sales";
object[,] rows = {
{ "Laptop", "なしrth", 1200 },
{ "Laptop", "South", 1500 },
{ "Phone", "なしrth", 800 },
{ "Phone", "South", 950 },
{ "Tablet", "East", 600 },
{ "Tablet", "West", 750 },
{ "Monitor", "なしrth", 400 },
{ "Monitor", "South", 500 },
{ "Keyboard", "East", 300 },
};
for (int i = 0; i < rows.GetLength(0); i++)
{
dataSheet[$"A{i + 2}"].Value = rows[i, 0];
dataSheet[$"B{i + 2}"].Value = rows[i, 1];
dataSheet[$"C{i + 2}"].Value = rows[i, 2];
}
// Aggregate data with LINQ -- equivalent to a pivot table row/column/value layout
DataTable table = dataSheet["A1:C10"].ToDataTable(true);
var summary = table.AsEnumerable()
.GroupBy(row => row.Field<string>("Product"))
.Select((group, idx) => new
{
Product = group.Key,
TotalSales = group.Sum(r => Convert.ToDecimal(r["Sales"])),
RegionCount = group.Select(r => r.Field<string>("Region")).Distinct().Count(),
RowIndex = idx + 2
})
.OrderByDescending(x => x.TotalSales);
// Write the summary sheet
WorkSheet summarySheet = workbook.CreateWorkSheet("Summary");
summarySheet["A1"].Value = "Product";
summarySheet["B1"].Value = "Total Sales";
summarySheet["C1"].Value = "Regions";
foreach (var item in summary)
{
summarySheet[$"A{item.RowIndex}"].Value = item.Product;
summarySheet[$"B{item.RowIndex}"].Value = (double)item.TotalSales;
summarySheet[$"C{item.RowIndex}"].Value = item.RegionCount;
}
// Apply currency format to the sales column
summarySheet["B:B"].FormatString = "$#,##0.00";
// Bold the header row
summarySheet["A1:C1"].Style.Font.Bold = true;
// Save -- no COM cleanup needed
workbook.SaveAs(@"C:\output\analysis_ironxl.xlsx");
Imports IronXL
Imports System.Data
Imports System.Linq
' Create workbook and populate source data
Dim workbook As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX)
Dim dataSheet As WorkSheet = workbook.CreateWorkSheet("SalesData")
dataSheet("A1").Value = "Product"
dataSheet("B1").Value = "Region"
dataSheet("C1").Value = "Sales"
Dim rows As Object(,) = {
{"Laptop", "なしrth", 1200},
{"Laptop", "South", 1500},
{"Phone", "なしrth", 800},
{"Phone", "South", 950},
{"Tablet", "East", 600},
{"Tablet", "West", 750},
{"Monitor", "なしrth", 400},
{"Monitor", "South", 500},
{"Keyboard", "East", 300}
}
For i As Integer = 0 To rows.GetLength(0) - 1
dataSheet($"A{i + 2}").Value = rows(i, 0)
dataSheet($"B{i + 2}").Value = rows(i, 1)
dataSheet($"C{i + 2}").Value = rows(i, 2)
Next
' Aggregate data with LINQ -- equivalent to a pivot table row/column/value layout
Dim table As DataTable = dataSheet("A1:C10").ToDataTable(True)
Dim summary = table.AsEnumerable() _
.GroupBy(Function(row) row.Field(Of String)("Product")) _
.Select(Function(group, idx) New With {
.Product = group.Key,
.TotalSales = group.Sum(Function(r) Convert.ToDecimal(r("Sales"))),
.RegionCount = group.Select(Function(r) r.Field(Of String)("Region")).Distinct().Count(),
.RowIndex = idx + 2
}) _
.OrderByDescending(Function(x) x.TotalSales)
' Write the summary sheet
Dim summarySheet As WorkSheet = workbook.CreateWorkSheet("Summary")
summarySheet("A1").Value = "Product"
summarySheet("B1").Value = "Total Sales"
summarySheet("C1").Value = "Regions"
For Each item In summary
summarySheet($"A{item.RowIndex}").Value = item.Product
summarySheet($"B{item.RowIndex}").Value = CDbl(item.TotalSales)
summarySheet($"C{item.RowIndex}").Value = item.RegionCount
Next
' Apply currency format to the sales column
summarySheet("B:B").FormatString = "$#,##0.00"
' Bold the header row
summarySheet("A1:C1").Style.Font.Bold = True
' Save -- no COM cleanup needed
workbook.SaveAs("C:\output\analysis_ironxl.xlsx")
解放すべきCOMオブジェクトはなく、終了すべきExcelプロセスもなく、管理すべきOfficeライセンスもありません。 同じコードは、Linux、macOS、Windowsのいずれのプラットフォームでも、修正なしでコンパイルおよび実行できます。 集計APIの詳細については、 IronXL WorkSheetのドキュメントを参照してください。
出力


導入と保守における主な違いは何ですか?
配備要件
Interopベースのアプリケーションをデプロイするには、ターゲット環境がWindowsを実行していること、適切なバージョンのOfficeがインストールされていること、およびサーバー上でCOMオートメーションのアクセス許可が構成されていることを確認する必要があります。 クラウドホスト環境やコンテナ化されたワークロードは、仮想化されたWindowsデスクトップインフラストラクチャを追加しない限り、通常これらの要件を満たすことができません。しかし、仮想化インフラストラクチャを追加すると、コストと運用上の複雑さが大幅に増加します。
IronXLにはそのような制約はありません。 NuGetパッケージを追加し、ターゲットフレームワークを.NET 6以降に設定すると、アプリケーションはLinuxコンテナ、Linux上のAzure App Service、AWS Lambda、オンプレミスのWindowsサーバーなど、あらゆるホストにデプロイされます。 IronXLのシステム要件ページには、完全な互換性マトリックスが記載されています。
エラーハンドリングとデバッグ
インターロップの失敗は、COM例外(@--CODE-42646--@@)として表面化し、ユーザーから見えるメッセージにマッピングすることは困難です。 インストールされているOfficeのバージョンとInteropアセンブリのバージョンが一致しない場合、別の障害モードが発生します。 これらの問題をデバッグするには、通常、開発用マシン上で全く同じバージョンのOfficeを再現する必要があります。
IronXLは標準的な--CODE-42647--@@サブクラスを説明的なメッセージとともに投げます。 ファイル操作をtry-catchブロックで囲むことで、COMエラーコードを理解しなくても意味のあるフィードバックを提供できます。 IronXLのトラブルシューティングガイドでは、よくある例外とその解決策について説明しています。
メモリとパフォーマンス
COMオブジェクトは、管理されていないメモリを保持します。 コードが多数のワークシートを処理したり、ループ内で実行されたりする場合、各参照を正しく解放しないと、時間の経過とともにメモリが増大します。これは、本番環境で問題が発生するまで検出が困難な問題です。 Interopは単一のExcelウィンドウを操作するため、本質的にシングルスレッドです。
IronXLは、 .NETガベージコレクタによって支えられたマネージドオブジェクトを使用します。 オブジェクトがスコープ外になると、メモリは自動的に解放されます。 複数のワークブックを並行して処理するのは簡単です。なぜなら、ロックで保護する必要のある共有COM状態が存在しないからです。
2つのアプローチのどちらを選ぶべきか?
適切なツールは、コードが実行される場所と、ネイティブのピボットテーブルXMLが必要かどうかという2つの制約によって決まります。
Excel Interop を選ぶとき:
- このワークロードは、Officeが既にインストールされているWindowsデスクトップマシンでのみ実行されます。 出力ファイルには、ネイティブのピボットテーブルの書式設定(スライサー、グループ化された日付フィールド、計算項目)が正確に含まれている必要があります。 既存の相互運用コードベースを維持しており、全面的な書き直しは正当化されない。
IronXL を選ぶとき:
- アプリケーションはサーバー、コンテナ、またはクラウド機能上で実行されます
- クロスプラットフォームまたはLinuxへの展開が必要です
- 単体テストで検証可能なデータ集計ロジックが必要であり、Excelプロセスに依存しないロジックが必要です。
- Excelファイルを大規模または並列処理する必要がある場合
ほとんどの新しい.NET 10プロジェクトでは、 IronXLが事実上のデフォルト設定となっています。 IronXLライブラリは、 C#でのExcelファイルの読み込み、グラフの作成、セルスタイルの適用、数式の操作、 ExcelデータのDataTableへのエクスポートなどもカバーしており、スタック内で複数のライブラリを使用する必要性を軽減します。
.
IronXLにはデータ分析をサポートするその他の機能は何ですか?
IronXLは、基本的な集計機能に加えて、より高度なデータ分析ワークフローをサポートするいくつかの機能を提供します。
データの並べ替えとフィルタリング
要約シートを作成する前に、範囲を昇順または降順に並べ替えることができます。 これにより、出力データが常に一貫した順序で表示されることが保証され、後続の処理がより予測可能になります。 範囲レベルのソートオプションについては、 IronXLのソートに関するドキュメントを参照してください。
条件付き書式の適用
条件付き書式設定ルールをプログラムで適用することにより、外れ値や閾値を強調表示します。 例えば、売上が目標値を下回った場合にサマリーシートのセルを赤色にすることで、エンドユーザーが手動でルールを設定する必要なく、一目で状況を把握できるようにすることができます。
既存のExcelファイルの読み取り
ソースデータがデータベースではなく、既存のスプレッドシートから来る場合は、WorkBook.Loadで直接読み込むことができます:
using IronXL;
WorkBook existing = WorkBook.Load(@"C:\data\sales_report.xlsx");
WorkSheet sheet = existing.WorkSheets[0];
// Read column C starting at row 2
var salesValues = sheet["C2:C100"]
.Where(cell => cell.Value != null && cell.Value.ToString() != string.Empty)
.Select(cell => cell.DecimalValue)
.ToList();
decimal total = salesValues.Sum();
Console.WriteLine($"Total sales from file: {total:C}");
using IronXL;
WorkBook existing = WorkBook.Load(@"C:\data\sales_report.xlsx");
WorkSheet sheet = existing.WorkSheets[0];
// Read column C starting at row 2
var salesValues = sheet["C2:C100"]
.Where(cell => cell.Value != null && cell.Value.ToString() != string.Empty)
.Select(cell => cell.DecimalValue)
.ToList();
decimal total = salesValues.Sum();
Console.WriteLine($"Total sales from file: {total:C}");
Imports IronXL
Dim existing As WorkBook = WorkBook.Load("C:\data\sales_report.xlsx")
Dim sheet As WorkSheet = existing.WorkSheets(0)
' Read column C starting at row 2
Dim salesValues = sheet("C2:C100") _
.Where(Function(cell) cell.Value IsNot Nothing AndAlso cell.Value.ToString() <> String.Empty) _
.Select(Function(cell) cell.DecimalValue) _
.ToList()
Dim total As Decimal = salesValues.Sum()
Console.WriteLine($"Total sales from file: {total:C}")
このパターンは、@@--CODE-42649--@、@@--CODE-42650--@、@@--CODE-42651--@、およびIronXLがサポートするその他のフォーマットで機能します。 サポートされている形式の詳細については、IronXLファイル形式のドキュメントを参照してください。
CSVへのエクスポート
要約ワークシートを作成した後、Excelファイルを受け付けない下流システム向けにCSV形式でエクスポートできます。
workbook.SaveAsCsv(@"C:\output\summary.csv");
workbook.SaveAsCsv(@"C:\output\summary.csv");
workbook.SaveAsCsv("C:\output\summary.csv")
これは、最終的な利用者がデータベースインポートツールやデータウェアハウスローダーであるETLパイプラインにおいて特に有用です。
IronXLを無料で使い始めるにはどうすればよいですか?
IronXLは無料トライアルライセンスで利用可能で、サブスクリプション契約を結ぶことなく全機能を評価できます。 試用版では出力ファイルに透かしが入りますが、製品版ライセンスキーを適用すると透かしは削除されます。
コード内でライセンスキーを有効化するには、 IronXLの操作を行う前に設定してください。
IronXL.License.LicenseKey = "YOUR-LICENSE-KEY-HERE";
IronXL.License.LicenseKey = "YOUR-LICENSE-KEY-HERE";
Imports IronXL
IronXL.License.LicenseKey = "YOUR-LICENSE-KEY-HERE"
環境変数(@--CODE-42652--@@)またはASP.NET Coreプロジェクトの@--CODE-42653--@@を介してキーを設定することもできます。 IronXLのライセンスページには、チーム向けや組織向けオプションを含む、利用可能なすべてのプランが記載されています。
本番環境へのデプロイについては、 IronXLのデプロイに関するドキュメントと、 ASP.NET Core 、Azure Functions、Dockerを網羅したパターンが掲載されているIronXLチュートリアルライブラリを参照してください。
.
次のステップに進むにはどうすればいいですか?
C# で Excel のピボットテーブルを作成する際に、Office への依存や COM の複雑さは必ずしも必要ではありません。 IronXLを使えば、あらゆるプラットフォームで実行でき、メモリを自動的に処理し、単体テストフレームワークやCI/CDパイプラインと自然に統合できる、シンプルな.NETコードを記述できます。
IronXLの無料トライアル版をダウンロードして、このガイドの例を自分のデータで実行してみてください。 ご不明な点がある場合は、 IronXLのコミュニティフォーラムとサポートポータルが、トライアルユーザーとライセンスユーザーの両方にご利用いただけます。 導入準備が整ったら、ライセンスオプションを確認し、チームの規模と使用量に合ったプランを選択してください。
よくある質問
ピボットテーブルを作成する際にIronXLがExcel Interopよりも優れている理由は何ですか?
IronXLは、従来のExcel Interopと比較して、Excelファイルにピボットテーブルを作成する、よりモダンで効率的な方法を提供します。プロセスを簡素化し、必要な定型コードを削減します。
IronXL.ExcelでC#を使用してピボット・テーブルを作成できますか?
IronXLはC#を使用してExcelでピボットテーブルを作成する簡単な方法を提供します。これにより、開発者はExcel Interopに依存することなく、Excelファイルを簡単に操作できるようになります。
IronXLは.NETアプリケーションと互換性がありますか?
IronXLは.NETアプリケーションと完全な互換性があり、C#プロジェクトにExcelの機能を統合したい開発者に最適です。
IronXLはシステムにExcelをインストールする必要がありますか?
IronXLはMicrosoft Excelをシステムにインストールする必要はありません。これはExcelのインストールを必要とするExcel Interopに比べて大きな利点です。
IronXLはピボットテーブルの作成プロセスをどのように簡素化しますか?
IronXLは、ユーザーフレンドリーなAPIを提供することで、大規模な定型コードの必要性を減らし、開発プロセスをより迅速かつ効率的にすることで、プロセスを簡素化します。
IronXLを使用するためのシステム要件は何ですか?
IronXLは.NETフレームワークと互換性のある環境を必要としますが、Microsoft Excelをインストールする必要はありません。
IronXLは大規模なExcelファイルを効率的に処理できますか?
IronXLは大きなExcelファイルを効率的に処理するように設計されており、大量のデータを処理する必要があるビジネスアプリケーションに適しています。
IronXL.Excel Interopと比較して、IronXL.Excelの使用には学習が必要ですか?
IronXLは直感的で学習しやすいように設計されており、包括的なドキュメントとサンプルが用意されています。
IronXL.Excelではピボットテーブルの作成以外にどのような操作ができますか?
IronXLはExcelファイルの読み書き、セルの書式設定、数式の適用など、幅広いExcel操作を行うことができます。
IronXLはピボットテーブルをExcel以外の形式にエクスポートできますか?
IronXLは主にExcelの操作に焦点を当てていますが、プロジェクトの要件に応じて、CSVやPDFなどの他のフォーマットへのデータのエクスポートもサポートしています。



