IRONXLの使用 Excel で相互運用性なしで C# を使ってピボット テーブルを作成する方法 カーティス・チャウ 更新日:2026年3月1日 IronXL をダウンロード NuGet ダウンロード DLL ダウンロード 無料トライアル LLM向けのコピー LLM向けのコピー LLM 用の Markdown としてページをコピーする ChatGPTで開く このページについてChatGPTに質問する ジェミニで開く このページについてGeminiに問い合わせる Grokで開く このページについてGrokに質問する 困惑の中で開く このページについてPerplexityに問い合わせる 共有する Facebook で共有 Xでシェア(Twitter) LinkedIn で共有 URLをコピー 記事をメールで送る 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の比較概要 基準 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 SHELL パッケージ単体では不十分であることに注意してください。対象のマシンには、対応するバージョンのMicrosoft Excelがインストールされ、適切なライセンスが付与されている必要があります。 その依存関係により、ほとんどのサーバー、コンテナ、クラウドのシナリオは除外されます。 IronXLの設定 追加のシステム要件なしでNuGet経由でIronXLをインストールできます。 Install-Package IronXl.Excel dotnet add package IronXl.Excel Install-Package IronXl.Excel dotnet add package IronXl.Excel SHELL インストール後、 .NETをサポートするあらゆるプラットフォームで、すぐにExcelファイルの読み書きを開始できます。 Officeライセンス不要、COM登録不要、サーバー設定不要。 オフラインインストールやプロジェクト参照設定など、その他のオプションについては、 IronXLのインストールガイドを参照してください。 今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", "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 (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", "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 (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) $vbLabelText $csharpLabel すべての 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", "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 (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", "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 (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", "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($"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") $vbLabelText $csharpLabel 解放すべき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 例外 (COMException) として現れますが、これはユーザーに表示されるメッセージにマッピングするのが困難です。 インストールされているOfficeのバージョンとInteropアセンブリのバージョンが一致しない場合、別の障害モードが発生します。 これらの問題をデバッグするには、通常、開発用マシン上で全く同じバージョンのOfficeを再現する必要があります。 IronXL は、説明的なメッセージとともに標準の System.Exception サブクラスをスローします。 ファイル操作を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}") $vbLabelText $csharpLabel このパターンは、.csv、およびIronXLでサポートされているその他のフォーマットで機能します。 サポートされているフォーマットの詳細については、 IronXLファイルフォーマットのドキュメントを参照してください。 CSVへのエクスポート 要約ワークシートを作成した後、Excelファイルを受け付けない下流システム向けにCSV形式でエクスポートできます。 workbook.SaveAsCsv(@"C:\output\summary.csv"); workbook.SaveAsCsv(@"C:\output\summary.csv"); workbook.SaveAsCsv("C:\output\summary.csv") $vbLabelText $csharpLabel これは、最終的な利用者がデータベースインポートツールやデータウェアハウスローダーである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" $vbLabelText $csharpLabel 環境変数 (IRONXL_LICENSEKEY) またはASP.NET Coreプロジェクトで appsettings.json を使用してキーを設定することもできます。 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などの他のフォーマットへのデータのエクスポートもサポートしています。 カーティス・チャウ 今すぐエンジニアリングチームとチャット テクニカルライター Curtis Chauは、カールトン大学でコンピュータサイエンスの学士号を取得し、Node.js、TypeScript、JavaScript、およびReactに精通したフロントエンド開発を専門としています。直感的で美しいユーザーインターフェースを作成することに情熱を持ち、Curtisは現代のフレームワークを用いた開発や、構造の良い視覚的に魅力的なマニュアルの作成を楽しんでいます。開発以外にも、CurtisはIoT(Internet of Things)への強い関心を持ち、ハードウェアとソフトウェアの統合方法を模索しています。余暇には、ゲームをしたりDiscordボットを作成したりして、技術に対する愛情と創造性を組み合わせています。 関連する記事 更新日 2026年3月1日 ASP .NET C# で Excel ファイルをダウンロード: XLSX、CSV などにデータをエクスポート C#とIronXLを使用して、 ASP.NET CoreでExcelファイルをダウンロードします。MVCコントローラーからMemoryStreamとFile()を使用して、XLSX、CSV、XML形式でデータをエクスポートします。コード例も含まれています。 詳しく読む 更新日 2026年3月1日 IronXLを使用してBlazorで Excel ファイルをエクスポートする方法 IronXLを使用してBlazor Server アプリケーションから Excel にデータをエクスポートする方法を学びます。このガイドでは、プロジェクトのセットアップ、サービス設計、条件付き書式、複数シートのレポート、エラー処理について、完全な C# コード例とともに説明します。 詳しく読む 更新日 2026年2月27日 StreamReader の代わりに C# で Excel ファイルを読み取る方法 StreamReader が Excel ファイルを読み取れない理由と、 IronXL を使用して C# .NETのディスクまたはメモリ ストリームから XLSX および XLS ワークブックを読み込む方法について説明します。 詳しく読む ASP .NET C# で Excel ファイルをダウンロード: XLSX、CSV などにデータをエクスポートIronXLを使用してBlazorで Exce...
更新日 2026年3月1日 ASP .NET C# で Excel ファイルをダウンロード: XLSX、CSV などにデータをエクスポート C#とIronXLを使用して、 ASP.NET CoreでExcelファイルをダウンロードします。MVCコントローラーからMemoryStreamとFile()を使用して、XLSX、CSV、XML形式でデータをエクスポートします。コード例も含まれています。 詳しく読む
更新日 2026年3月1日 IronXLを使用してBlazorで Excel ファイルをエクスポートする方法 IronXLを使用してBlazor Server アプリケーションから Excel にデータをエクスポートする方法を学びます。このガイドでは、プロジェクトのセットアップ、サービス設計、条件付き書式、複数シートのレポート、エラー処理について、完全な C# コード例とともに説明します。 詳しく読む
更新日 2026年2月27日 StreamReader の代わりに C# で Excel ファイルを読み取る方法 StreamReader が Excel ファイルを読み取れない理由と、 IronXL を使用して C# .NETのディスクまたはメモリ ストリームから XLSX および XLS ワークブックを読み込む方法について説明します。 詳しく読む