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

IronXLを使用して C# で Excel ファイルを生成する方法

C#でプログラム的にExcelワークシートファイルを生成するには、従来、Microsoft Officeのインストールや複雑なCOM相互運用性が必要でした。IronXLこれを完全に変え、Officeに依存せずにExcelファイルを作成できるシンプルなAPIを提供します。 このチュートリアルでは、基本的なスプレッドシートの作成から高度なフォーマットやデータベース統合まで、C# を使用して IronXL で Excel ファイルを構築する方法について説明しています。 レポートの作成、データのエクスポート (XLS または XLSX ファイル)、スプレッドシート生成の自動化など、 .NETアプリケーションで Excel を操作するための基本的なテクニックを学習します。

 IronXLを使用して C# で Excel ファイルを生成する方法: 画像 1 - IronXL

Microsoft Office なしで Excel ファイルを生成する理由は何ですか?

Office への依存性なしで Excel 生成機能を開発することは、重大なデプロイメントの課題を解決します。 サーバー環境には、通常、ライセンスコストとリソースオーバーヘッドのために Microsoft Office はインストールされていません。 各 Office インストールは大量のディスク空間とメモリを必要とし、クラウド展開やコンテナ化されたアプリケーションには非現実的です。

IronXL は独立して動作することでこれらの制約を排除します。 C# での Excel ファイル生成は、Windows、Linux、macOS、Docker コンテナ、または Azure App Services 上で変更なしに動作します。 このクロスプラットフォームの互換性により、 .NET Framework、 .NET Core、 .NET 10 アプリケーションのいずれを対象とする場合でも、一度記述すればどこにでも展開できます。

 IronXLを使用して C# で Excel ファイルを生成する方法: 画像 2 - クロスプラットフォーム

COM インタープのオーバーヘッドなしでパフォーマンスが劇的に改善されます。 従来の Office 自動化は各操作のために別々のプロセスインスタンスを作成し、メモリと CPU リソースを消費します。 IronXL はアプリケーションのプロセス スペース内のすべてをメモリ内で処理するため、プログラムで Excel ファイルを生成するときに実行が高速化し、リソースの消費が削減されます。

デプロイメントがシンプルになります。IronXL は単一の NuGet パッケージとして提供されます。 レジストリ エントリ、COM 登録、および Office サービス パックを保守する必要はありません。 継続的インテグレーション パイプラインはスムーズに動作し、Docker コンテナは軽量なままです。 このシンプルなアプローチにより、IronXL は人気のある選択肢となっており、開発者フォーラムでプロフェッショナルが Excel 自動化についての経験を共有しています。

一部の開発者は、Office Open XML ファイル構造を直接操作するために、Microsoft の Open XML 生産性ツールをまだ検討しています。 ただし、そのアプローチには XML スキーマや Open XML SDK インストールの詳細な知識を要するため、さらなる手動の努力が必要です。 IronXLはこのような複雑な問題を抽象化し、Excelをプログラムでより速く操作できるようにします。

 IronXLを使用して C# で Excel ファイルを生成する方法: 画像 3 - 機能

C# プロジェクトにIronXLをインストールするにはどうすればいいですか?

IronXLのインストールは、Visual Studio のNuGetパッケージ マネージャーを使用するとほんの数分で完了します。 ソリューション エクスプローラーでプロジェクトを右クリックし、" NuGetパッケージの管理"を選択します。"IronXl.Excel"を検索し、"インストール"をクリックします。 パッケージには、C# で Excel ファイルを生成するために必要なすべての依存関係が自動的に含まれます。

パッケージ マネージャー コンソールまたは.NET CLI 経由でインストールするには、次のいずれかのコマンドを使用します。

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

 IronXLを使用して C# で Excel ファイルを生成する方法: 画像 4 - インストール

この簡単なテストでインストールを検証し、ライブラリの準備ができていることを確認します。

using IronXL;
// Create an in-memory workbook
var workbook = WorkBook.Create();
Console.WriteLine("IronXL installed successfully!");
using IronXL;
// Create an in-memory workbook
var workbook = WorkBook.Create();
Console.WriteLine("IronXL installed successfully!");
$vbLabelText   $csharpLabel

これがエラーなしで実行された場合、 IronXL は使用できる状態になります。 ライブラリはすべてのモダンな .NET バージョンをサポートし、既存のプロジェクトと互換性があります。 詳細なインストール ガイダンスとトラブルシューティングについては、公式のNuGetインストール ドキュメントを参照してください。

出力

 IronXLを使用して C# で Excel ファイルを生成する方法: 画像 5 - コンソール出力

最初の Excel ファイルを作成するにはどうすればよいですか?

IronXLで Excel ファイルを作成するには、すべての Excel 操作への入り口となる WorkBook クラスから始まります。 このライブラリは最新の XLSX 形式と従来の XLS 形式の両方をサポートしており、 C# で Excel ファイルを作成するときにさまざまな要件に柔軟に対応できます。

using IronXL;
// Create a new workbook (XLSX format by default)
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
// Add metadata
workbook.Metadata.Title = "Monthly Sales Report";
workbook.Metadata.Author = "Sales Department";
workbook.Metadata.Comments = "Generated using IronXL";
// Create a worksheet
WorkSheet worksheet = workbook.CreateWorkSheet("January Sales");
// Add header row
worksheet["A1"].Value = "Date";
worksheet["B1"].Value = "Product";
worksheet["C1"].Value = "Quantity";
worksheet["D1"].Value = "Revenue";
// Add data rows
worksheet["A2"].Value = new DateTime(2024, 1, 15);
worksheet["B2"].Value = "Widget Pro";
worksheet["C2"].Value = 100;
worksheet["D2"].Value = 2500.00;
// Save the workbook
workbook.SaveAs("FirstExcelFile.xlsx");
using IronXL;
// Create a new workbook (XLSX format by default)
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
// Add metadata
workbook.Metadata.Title = "Monthly Sales Report";
workbook.Metadata.Author = "Sales Department";
workbook.Metadata.Comments = "Generated using IronXL";
// Create a worksheet
WorkSheet worksheet = workbook.CreateWorkSheet("January Sales");
// Add header row
worksheet["A1"].Value = "Date";
worksheet["B1"].Value = "Product";
worksheet["C1"].Value = "Quantity";
worksheet["D1"].Value = "Revenue";
// Add data rows
worksheet["A2"].Value = new DateTime(2024, 1, 15);
worksheet["B2"].Value = "Widget Pro";
worksheet["C2"].Value = 100;
worksheet["D2"].Value = 2500.00;
// Save the workbook
workbook.SaveAs("FirstExcelFile.xlsx");
$vbLabelText   $csharpLabel

このコードは Excel ファイル生成の主要な概念をいくつか示します。 WorkBook.Create() メソッドは、メモリ内に新しい Excel ファイルを初期化します。 形式は、ExcelFileFormat 列挙を使用して指定します。最新の Excel との互換性が必要な場合は XLSX を選択し、従来のサポートが必要な場合は XLS を選択します。 Metadata プロパティを使用すると、 Microsoft のドキュメント プロパティ標準に従って、Excel のファイル プロパティに表示されるドキュメント情報を埋め込むことができます。

CreateWorkSheet() メソッドは、指定された名前で新しいシートを追加します。 Excel のお馴染みのセル表記 (A1, B1 など) は、値を設定する際に直感的です。IronXL はデータ型変換を自動で処理し、日付、数値、テキストを明示的なキャストなしで認識します。 SaveAs() メソッドは、完全な Excel ファイルをディスクに書き込みます。 ワークシートの詳細な操作については、 Excel ファイルの書き方ガイドを参照してください。

出力

 IronXLを使用して C# で Excel ファイルを生成する方法: 画像 6 - 基本的な Excel 出力

Excel セルにデータを書き込むにはどうすればよいでしょうか?

IronXL は、個々のセルの割り当てから一括範囲操作まで、Excel セルの入力に複数のアプローチを提供します。 これらの方法を理解すると、Excel ファイルに書き込むときに、データ シナリオに最も効率的なアプローチを選択するのに役立ちます。

using IronXL;
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet worksheet = workbook.CreateWorkSheet("Employees");
// Individual cell assignment
worksheet["A1"].Value = "Employee Name";
worksheet["A2"].Value = "John Smith";
worksheet["A3"].Value = "Jane Doe";
// Range assignment for multiple cells at once
worksheet["B1:B3"].Value = "Active";
// Using numeric indices (0-based row, 0-based column)
worksheet.SetCellValue(0, 2, "Department"); // C1
worksheet.SetCellValue(1, 2, "Sales");       // C2
worksheet.SetCellValue(2, 2, "Marketing");   // C3
// Array-based header population
string[] headers = { "ID", "Name", "Email", "Phone" };
for (int i = 0; i < headers.Length; i++)
{
    worksheet.SetCellValue(0, i, headers[i]);
}
// Working with different data types
worksheet["E1"].Value = "Salary";
worksheet["E2"].Value = 75000.50m;  // Decimal for currency
worksheet["E3"].Value = 82000.75m;
worksheet["F1"].Value = "Start Date";
worksheet["F2"].Value = new DateTime(2020, 3, 15);
worksheet["F3"].Value = new DateTime(2019, 7, 1);
worksheet["G1"].Value = "Full Time";
worksheet["G2"].Value = true;  // Boolean
worksheet["G3"].Value = true;
workbook.SaveAs("EmployeeData.xlsx");
using IronXL;
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet worksheet = workbook.CreateWorkSheet("Employees");
// Individual cell assignment
worksheet["A1"].Value = "Employee Name";
worksheet["A2"].Value = "John Smith";
worksheet["A3"].Value = "Jane Doe";
// Range assignment for multiple cells at once
worksheet["B1:B3"].Value = "Active";
// Using numeric indices (0-based row, 0-based column)
worksheet.SetCellValue(0, 2, "Department"); // C1
worksheet.SetCellValue(1, 2, "Sales");       // C2
worksheet.SetCellValue(2, 2, "Marketing");   // C3
// Array-based header population
string[] headers = { "ID", "Name", "Email", "Phone" };
for (int i = 0; i < headers.Length; i++)
{
    worksheet.SetCellValue(0, i, headers[i]);
}
// Working with different data types
worksheet["E1"].Value = "Salary";
worksheet["E2"].Value = 75000.50m;  // Decimal for currency
worksheet["E3"].Value = 82000.75m;
worksheet["F1"].Value = "Start Date";
worksheet["F2"].Value = new DateTime(2020, 3, 15);
worksheet["F3"].Value = new DateTime(2019, 7, 1);
worksheet["G1"].Value = "Full Time";
worksheet["G2"].Value = true;  // Boolean
worksheet["G3"].Value = true;
workbook.SaveAs("EmployeeData.xlsx");
$vbLabelText   $csharpLabel

このコードは IronXL の柔軟なセルアドレス指定を示します。 文字列表記 ("A1") は Excel ユーザーにとって自然に感じられ、数値インデックスによってループや動的な生成のためにプログラム的な制御が提供されます。 範囲の割り当て ("B1:B3") は、複数のセルに効率的に同じ値を設定します。列を初期化したり、既定値を適用したりするのに最適です。

IronXLはさまざまなデータ型をインテリジェントに処理します。小数は財務データの精度を維持し、オブジェクトはExcelの日付として正しくフォーマットされ、ブール値はTRUE/FALSEとして表示されます。 この自動変換により手動のフォーマットコードが不要になり、データの整合性が保証されます。 大規模なデータセットの場合は、追加のパターンについてデータのインポート ガイドを参照してください。

出力

 IronXLを使用して C# で Excel ファイルを生成する方法: 画像 7 - Excel 出力

Excel ファイルにプロフェッショナルな書式設定を適用するにはどうすればよいですか?

プロフェッショナルな Excel ファイルには、生データ以上が必要です。 IronXL のスタイリング API は、書式設定、色、視覚的な階層を使用して、単純なスプレッドシートを洗練されたビジネス ドキュメントに変換します。 セルの書式設定を適用して、スプレッドシートのあらゆる視覚的な側面を制御できます。

using IronXL;
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet worksheet = workbook.CreateWorkSheet("Employees");
// Header formatting
var headerRange = worksheet["A1:D1"];
headerRange.Style.Font.Bold = true;
headerRange.Style.Font.Height = 12;
headerRange.Style.SetBackgroundColor("#4472C4");
headerRange.Style.Font.Color = "#FFFFFF";
// Column width adjustment
worksheet.AutoSizeColumn(0); // Auto-fit column A
worksheet.GetColumn(1).Width = 20; // Set column B width
// Number formatting
var salaryColumn = worksheet["E2:E3"];
salaryColumn.FormatString = "$#,##0.00";
// Date formatting
var dateColumn = worksheet["F2:F3"];
dateColumn.FormatString = "MM/dd/yyyy";
// Cell borders
var dataRange = worksheet["A1:G3"];
dataRange.Style.TopBorder.Type = IronXl.Styles.BorderType.Thin;
dataRange.Style.BottomBorder.Type = IronXl.Styles.BorderType.Thin;
dataRange.Style.LeftBorder.Type = IronXl.Styles.BorderType.Thin;
dataRange.Style.RightBorder.Type = IronXl.Styles.BorderType.Thin;
dataRange.Style.TopBorder.Color = "#000000";
dataRange.Style.BottomBorder.Color = "#000000";
// Text alignment
worksheet["A1:G1"].Style.HorizontalAlignment = IronXl.Styles.HorizontalAlignment.Center;
// Alternating row colors for readability (banded rows)
for (int row = 2; row <= 10; row++)
{
    if (row % 2 == 0)
    {
        worksheet[$"A{row}:G{row}"].Style.SetBackgroundColor("#F2F2F2");
    }
}
workbook.SaveAs("FormattedReport.xlsx");
using IronXL;
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet worksheet = workbook.CreateWorkSheet("Employees");
// Header formatting
var headerRange = worksheet["A1:D1"];
headerRange.Style.Font.Bold = true;
headerRange.Style.Font.Height = 12;
headerRange.Style.SetBackgroundColor("#4472C4");
headerRange.Style.Font.Color = "#FFFFFF";
// Column width adjustment
worksheet.AutoSizeColumn(0); // Auto-fit column A
worksheet.GetColumn(1).Width = 20; // Set column B width
// Number formatting
var salaryColumn = worksheet["E2:E3"];
salaryColumn.FormatString = "$#,##0.00";
// Date formatting
var dateColumn = worksheet["F2:F3"];
dateColumn.FormatString = "MM/dd/yyyy";
// Cell borders
var dataRange = worksheet["A1:G3"];
dataRange.Style.TopBorder.Type = IronXl.Styles.BorderType.Thin;
dataRange.Style.BottomBorder.Type = IronXl.Styles.BorderType.Thin;
dataRange.Style.LeftBorder.Type = IronXl.Styles.BorderType.Thin;
dataRange.Style.RightBorder.Type = IronXl.Styles.BorderType.Thin;
dataRange.Style.TopBorder.Color = "#000000";
dataRange.Style.BottomBorder.Color = "#000000";
// Text alignment
worksheet["A1:G1"].Style.HorizontalAlignment = IronXl.Styles.HorizontalAlignment.Center;
// Alternating row colors for readability (banded rows)
for (int row = 2; row <= 10; row++)
{
    if (row % 2 == 0)
    {
        worksheet[$"A{row}:G{row}"].Style.SetBackgroundColor("#F2F2F2");
    }
}
workbook.SaveAs("FormattedReport.xlsx");
$vbLabelText   $csharpLabel

この書式設定コードにより、ビジネス標準に準拠したプロフェッショナルな外観が作成されます。 背景色のついた太字のヘッダーは視覚的な階層を確立します。 SetBackgroundColor() メソッドは 16 進カラーコードを受け入れるため、カラースキームを正確に制御できます。 フォント プロパティには、サイズ、色、太字、斜体、下線のオプションが含まれます。これらはすべて、企業のブランド ガイドラインに準拠した Excel ファイルを作成するために不可欠です。

列幅の調整は、テキストの切り捨てを防ぎます。 AutoSizeColumn() はコンテンツを自動的に適合させますが、GetColumn().Width は正確な制御を提供します。 数値の書式設定では Excel の書式コードが使用されます。たとえば、"$#,##0.00"は、千単位の区切りと 2 桁の小数点付きの通貨を表示します。 日付の書式設定は、Microsoft の数値書式コード リファレンスに記載されている標準の Excel 日付書式文字列を使用して、同様のパターンに従います。

罫線はデータの境界を定義し、可読性を向上させます。 BorderType 列挙型は、細線、中線、太線、点線、破線など、さまざまなスタイルを提供します。 交互の行の色、いわゆる "バンド付き行" は、広いデータセットを横断して情報を追跡するために役立ちます。 セルの結合やその他のレイアウト機能の詳細については、"セルの結合ガイド"を参照してください。

出力

 IronXLを使用して C# で Excel ファイルを生成する方法: 画像 8 - フォーマットされた Excel 出力

Excel の数式をプログラムで使用するにはどうすればよいですか?

Excel フォーミュラは、自動計算でスプレッドシートに生命を吹き込みます。 IronXL はフォーミュラの作成と評価をサポートしており、動的なスプレッドシートを自動的に更新できます。

using IronXL;
var workbook = WorkBook.Create();
// Create a budget worksheet
WorkSheet budget = workbook.CreateWorkSheet("Q1 Budget");
// Headers
budget["A1"].Value = "Category";
budget["B1"].Value = "January";
budget["C1"].Value = "February";
budget["D1"].Value = "March";
budget["E1"].Value = "Q1 Total";
// Budget categories and values
string[] categories = { "Salaries", "Marketing", "Operations", "Equipment", "Training" };
decimal[,] monthlyBudgets = {
    { 50000, 52000, 51000 },
    { 15000, 18000, 20000 },
    { 8000, 8500, 9000 },
    { 12000, 5000, 7000 },
    { 3000, 3500, 4000 }
};
// Populate data and add row total formulas
for (int i = 0; i < categories.Length; i++)
{
    budget[$"A{i + 2}"].Value = categories[i];
    budget[$"B{i + 2}"].Value = monthlyBudgets[i, 0];
    budget[$"C{i + 2}"].Value = monthlyBudgets[i, 1];
    budget[$"D{i + 2}"].Value = monthlyBudgets[i, 2];
    budget[$"E{i + 2}"].Formula = $"=SUM(B{i + 2}:D{i + 2})";
}
// Monthly totals row
budget["A7"].Value = "Monthly Total";
budget["B7"].Formula = "=SUM(B2:B6)";
budget["C7"].Formula = "=SUM(C2:C6)";
budget["D7"].Formula = "=SUM(D2:D6)";
budget["E7"].Formula = "=SUM(E2:E6)";
// Calculate percentages
budget["A9"].Value = "Marketing %";
budget["B9"].Formula = "=B3/B7*100";
// Average calculation
budget["A10"].Value = "Average Spending";
budget["B10"].Formula = "=AVERAGE(B2:B6)";
// Evaluate all formulas before saving
workbook.EvaluateAll();
workbook.SaveAs("Budget.xlsx");
using IronXL;
var workbook = WorkBook.Create();
// Create a budget worksheet
WorkSheet budget = workbook.CreateWorkSheet("Q1 Budget");
// Headers
budget["A1"].Value = "Category";
budget["B1"].Value = "January";
budget["C1"].Value = "February";
budget["D1"].Value = "March";
budget["E1"].Value = "Q1 Total";
// Budget categories and values
string[] categories = { "Salaries", "Marketing", "Operations", "Equipment", "Training" };
decimal[,] monthlyBudgets = {
    { 50000, 52000, 51000 },
    { 15000, 18000, 20000 },
    { 8000, 8500, 9000 },
    { 12000, 5000, 7000 },
    { 3000, 3500, 4000 }
};
// Populate data and add row total formulas
for (int i = 0; i < categories.Length; i++)
{
    budget[$"A{i + 2}"].Value = categories[i];
    budget[$"B{i + 2}"].Value = monthlyBudgets[i, 0];
    budget[$"C{i + 2}"].Value = monthlyBudgets[i, 1];
    budget[$"D{i + 2}"].Value = monthlyBudgets[i, 2];
    budget[$"E{i + 2}"].Formula = $"=SUM(B{i + 2}:D{i + 2})";
}
// Monthly totals row
budget["A7"].Value = "Monthly Total";
budget["B7"].Formula = "=SUM(B2:B6)";
budget["C7"].Formula = "=SUM(C2:C6)";
budget["D7"].Formula = "=SUM(D2:D6)";
budget["E7"].Formula = "=SUM(E2:E6)";
// Calculate percentages
budget["A9"].Value = "Marketing %";
budget["B9"].Formula = "=B3/B7*100";
// Average calculation
budget["A10"].Value = "Average Spending";
budget["B10"].Formula = "=AVERAGE(B2:B6)";
// Evaluate all formulas before saving
workbook.EvaluateAll();
workbook.SaveAs("Budget.xlsx");
$vbLabelText   $csharpLabel

この予算の例は、フォーミュラの実際の応用を示しています。 Formula プロパティは、等号で始まる標準の Excel 数式構文を受け入れます。 IronXLは一般的な関数をサポートしています:SUM、AVERAGE、COUNT、MAX、MIN、その他多数。 フォーミュラ内のセル参照は Excel と全く同様に、相対参照と絶対参照に対応しています。

EvaluateAll() メソッドはすべての数式を処理し、ワークブック全体で計算値を更新します。 これにより、ファイルを Excel で開いたときに数式の結果が表示されるようになります。 評価を行わない場合、ユーザーが再計算を実行するまで、Excel は数式テキストを表示します。 数式の結果の読み取りの詳細については、 Excel ファイルの読み取りに関するドキュメントを参照してください。

出力

 IronXLを使用して C# で Excel ファイルを生成する方法: 画像 9 - 数式を使用した Excel 出力

データベースのデータを Excel にエクスポートするにはどうすればよいですか?

現実的なアプリケーションは、レポートや分析のためにデータベースデータを Excel にエクスポートすることが多々あります。 IronXL は、組み込みの DataTable サポートによりこのプロセスを簡単にし、 C# アプリケーションから Excel をエクスポートするときに手動でフィールド マッピングする必要がなくなります。

using System.Data;
using IronXL;

// Simulate database retrieval (replace with actual database code)
DataTable GetSalesData()
{
    DataTable dt = new DataTable("Sales");
    dt.Columns.Add("OrderID", typeof(int));
    dt.Columns.Add("CustomerName", typeof(string));
    dt.Columns.Add("Product", typeof(string));
    dt.Columns.Add("Quantity", typeof(int));
    dt.Columns.Add("UnitPrice", typeof(decimal));
    dt.Columns.Add("OrderDate", typeof(DateTime));
    dt.Rows.Add(1001, "ABC Corp", "Widget Pro", 50, 25.99m, DateTime.Now.AddDays(-5));
    dt.Rows.Add(1002, "XYZ Ltd", "Widget Basic", 100, 15.99m, DateTime.Now.AddDays(-4));
    dt.Rows.Add(1003, "ABC Corp", "Widget Premium", 25, 45.99m, DateTime.Now.AddDays(-3));
    dt.Rows.Add(1004, "Tech Solutions", "Widget Pro", 75, 25.99m, DateTime.Now.AddDays(-2));
    dt.Rows.Add(1005, "XYZ Ltd", "Widget Premium", 30, 45.99m, DateTime.Now.AddDays(-1));
    return dt;
}

// Export to Excel
WorkBook reportWorkbook = WorkBook.Create();
WorkSheet reportSheet = reportWorkbook.CreateWorkSheet("Sales Report");
DataTable salesData = GetSalesData();

// Title row
reportSheet["A1"].Value = "Order Report - " + DateTime.Now.ToString("MMMM yyyy");
reportSheet.Merge("A1:F1");
reportSheet["A1"].Style.Font.Bold = true;
reportSheet["A1"].Style.Font.Height = 14;

// Headers
int headerRow = 3;
for (int col = 0; col < salesData.Columns.Count; col++)
{
    reportSheet.SetCellValue(headerRow - 1, col, salesData.Columns[col].ColumnName);
}
var headers = reportSheet[$"A{headerRow}:F{headerRow}"];
headers.Style.Font.Bold = true;
headers.Style.SetBackgroundColor("#D9E1F2");

// Data rows
for (int row = 0; row < salesData.Rows.Count; row++)
{
    for (int col = 0; col < salesData.Columns.Count; col++)
    {
        reportSheet.SetCellValue(row + headerRow, col, salesData.Rows[row][col]);
    }
    reportSheet[$"G{row + headerRow + 1}"].Formula = $"=D{row + headerRow + 1}*E{row + headerRow + 1}";
}

// Total header
reportSheet["G3"].Value = "Total";
reportSheet["G3"].Style.Font.Bold = true;
reportSheet["G3"].Style.SetBackgroundColor("#D9E1F2");
// Format currency and date columns
reportSheet[$"E{headerRow + 1}:E{headerRow + salesData.Rows.Count}"].FormatString = "$#,##0.00";
reportSheet[$"G{headerRow + 1}:G{headerRow + salesData.Rows.Count}"].FormatString = "$#,##0.00";
reportSheet[$"F{headerRow + 1}:F{headerRow + salesData.Rows.Count}"].FormatString = "MM/dd/yyyy";

// Summary section
int summaryRow = headerRow + salesData.Rows.Count + 2;
reportSheet[$"A{summaryRow}"].Value = "Summary";
reportSheet[$"A{summaryRow}"].Style.Font.Bold = true;
reportSheet[$"A{summaryRow + 1}"].Value = "Total Orders:";
reportSheet[$"B{summaryRow + 1}"].Formula = $"=COUNTA(A{headerRow + 1}:A{headerRow + salesData.Rows.Count})";
reportSheet[$"A{summaryRow + 2}"].Value = "Total Revenue:";
reportSheet[$"B{summaryRow + 2}"].Formula = $"=SUM(G{headerRow + 1}:G{headerRow + salesData.Rows.Count})";
reportSheet[$"B{summaryRow + 2}"].FormatString = "$#,##0.00";

for (int col = 0; col <= 6; col++) { reportSheet.AutoSizeColumn(col); }
reportWorkbook.EvaluateAll();
reportWorkbook.SaveAs("DatabaseExport.xlsx");
using System.Data;
using IronXL;

// Simulate database retrieval (replace with actual database code)
DataTable GetSalesData()
{
    DataTable dt = new DataTable("Sales");
    dt.Columns.Add("OrderID", typeof(int));
    dt.Columns.Add("CustomerName", typeof(string));
    dt.Columns.Add("Product", typeof(string));
    dt.Columns.Add("Quantity", typeof(int));
    dt.Columns.Add("UnitPrice", typeof(decimal));
    dt.Columns.Add("OrderDate", typeof(DateTime));
    dt.Rows.Add(1001, "ABC Corp", "Widget Pro", 50, 25.99m, DateTime.Now.AddDays(-5));
    dt.Rows.Add(1002, "XYZ Ltd", "Widget Basic", 100, 15.99m, DateTime.Now.AddDays(-4));
    dt.Rows.Add(1003, "ABC Corp", "Widget Premium", 25, 45.99m, DateTime.Now.AddDays(-3));
    dt.Rows.Add(1004, "Tech Solutions", "Widget Pro", 75, 25.99m, DateTime.Now.AddDays(-2));
    dt.Rows.Add(1005, "XYZ Ltd", "Widget Premium", 30, 45.99m, DateTime.Now.AddDays(-1));
    return dt;
}

// Export to Excel
WorkBook reportWorkbook = WorkBook.Create();
WorkSheet reportSheet = reportWorkbook.CreateWorkSheet("Sales Report");
DataTable salesData = GetSalesData();

// Title row
reportSheet["A1"].Value = "Order Report - " + DateTime.Now.ToString("MMMM yyyy");
reportSheet.Merge("A1:F1");
reportSheet["A1"].Style.Font.Bold = true;
reportSheet["A1"].Style.Font.Height = 14;

// Headers
int headerRow = 3;
for (int col = 0; col < salesData.Columns.Count; col++)
{
    reportSheet.SetCellValue(headerRow - 1, col, salesData.Columns[col].ColumnName);
}
var headers = reportSheet[$"A{headerRow}:F{headerRow}"];
headers.Style.Font.Bold = true;
headers.Style.SetBackgroundColor("#D9E1F2");

// Data rows
for (int row = 0; row < salesData.Rows.Count; row++)
{
    for (int col = 0; col < salesData.Columns.Count; col++)
    {
        reportSheet.SetCellValue(row + headerRow, col, salesData.Rows[row][col]);
    }
    reportSheet[$"G{row + headerRow + 1}"].Formula = $"=D{row + headerRow + 1}*E{row + headerRow + 1}";
}

// Total header
reportSheet["G3"].Value = "Total";
reportSheet["G3"].Style.Font.Bold = true;
reportSheet["G3"].Style.SetBackgroundColor("#D9E1F2");
// Format currency and date columns
reportSheet[$"E{headerRow + 1}:E{headerRow + salesData.Rows.Count}"].FormatString = "$#,##0.00";
reportSheet[$"G{headerRow + 1}:G{headerRow + salesData.Rows.Count}"].FormatString = "$#,##0.00";
reportSheet[$"F{headerRow + 1}:F{headerRow + salesData.Rows.Count}"].FormatString = "MM/dd/yyyy";

// Summary section
int summaryRow = headerRow + salesData.Rows.Count + 2;
reportSheet[$"A{summaryRow}"].Value = "Summary";
reportSheet[$"A{summaryRow}"].Style.Font.Bold = true;
reportSheet[$"A{summaryRow + 1}"].Value = "Total Orders:";
reportSheet[$"B{summaryRow + 1}"].Formula = $"=COUNTA(A{headerRow + 1}:A{headerRow + salesData.Rows.Count})";
reportSheet[$"A{summaryRow + 2}"].Value = "Total Revenue:";
reportSheet[$"B{summaryRow + 2}"].Formula = $"=SUM(G{headerRow + 1}:G{headerRow + salesData.Rows.Count})";
reportSheet[$"B{summaryRow + 2}"].FormatString = "$#,##0.00";

for (int col = 0; col <= 6; col++) { reportSheet.AutoSizeColumn(col); }
reportWorkbook.EvaluateAll();
reportWorkbook.SaveAs("DatabaseExport.xlsx");
$vbLabelText   $csharpLabel

この例では、データベースから Excel への完全なワークフローを示します。 DataTable はデータベースの取得をシミュレートします。運用環境では、Entity Framework、Dapper、または ADO .NETを使用して、これを実際のデータベース クエリに置き換えます。 手動のマッピングアプローチは、Microsoft のデータエクスポートのベストプラクティスとして推奨されるように、書式設定とレイアウトに対する完全な制御を提供します。

コードはタイトル、フォーマットされたヘッダー、データ行でプロフェッショナルなレポートを作成します。 フォーミュラ列は、各行のトータルを動的に計算します。 概要セクションでは、Excel の数式を使用して注文数をカウントし、収益を合計し、データが変更された場合にこれらの値が更新されるようにします。 DataSet および大規模なデータ構造の操作については、 Excel から DataSet への変換ガイドを参照してください。

出力

 IronXLを使用して C# で Excel ファイルを生成する方法: 画像 10 - データベースを Excel 出力にエクスポート

Excel レポートを本番環境に導入する必要がありますか? ライセンスを取得して、IronXL の潜在能力を本番環境で最大限に活用しましょう。

複数のワークシートをどのように処理しますか?

複雑な Excel ファイルはしばしば関連データを整理するために複数のワークシートを必要とします。 IronXL は、作成、アクセス、ワークシートの整理のための直感的なメソッドで複数シートの管理を簡素化します。 わずか数行のコードでワークブックシートを開いて管理できます。

using IronXL;
WorkBook companyReport = WorkBook.Create();
// Create department sheets
WorkSheet salesSheet = companyReport.CreateWorkSheet("Sales");
WorkSheet inventorySheet = companyReport.CreateWorkSheet("Inventory");
WorkSheet summarySheet = companyReport.CreateWorkSheet("Summary");

// Populate Sales sheet
salesSheet["A1"].Value = "Sales Dashboard";
salesSheet["A3"].Value = "Region";
salesSheet["B3"].Value = "Q1 Sales";
salesSheet["C3"].Value = "Q2 Sales";
string[] regions = { "North", "South", "East", "West" };
decimal[] q1Sales = { 250000, 180000, 220000, 195000 };
decimal[] q2Sales = { 275000, 195000, 240000, 210000 };
for (int i = 0; i < regions.Length; i++)
{
    salesSheet[$"A{i + 4}"].Value = regions[i];
    salesSheet[$"B{i + 4}"].Value = q1Sales[i];
    salesSheet[$"C{i + 4}"].Value = q2Sales[i];
}

// Populate Inventory sheet
inventorySheet["A1"].Value = "Inventory Status";
string[] products = { "Widget A", "Widget B", "Widget C" };
int[] stock = { 150, 45, 200 };
int[] reorderPoint = { 100, 50, 75 };
for (int i = 0; i < products.Length; i++)
{
    inventorySheet[$"A{i + 4}"].Value = products[i];
    inventorySheet[$"B{i + 4}"].Value = stock[i];
    inventorySheet[$"C{i + 4}"].Value = reorderPoint[i];
    string status = stock[i] <= reorderPoint[i] ? "REORDER" : "OK";
    inventorySheet[$"D{i + 4}"].Value = status;
    if (status == "REORDER")
        inventorySheet[$"D{i + 4}"].Style.Font.Color = "#FF0000";
}

// Summary sheet with cross-sheet formulas
summarySheet["A1"].Value = "Company Overview";
summarySheet["A4"].Value = "Total Q1 Sales";
summarySheet["B4"].Formula = "=SUM(Sales!B4:B7)";
summarySheet["A5"].Value = "Total Q2 Sales";
summarySheet["B5"].Formula = "=SUM(Sales!C4:C7)";
summarySheet["A6"].Value = "Products Need Reorder";
summarySheet["B6"].Formula = "=COUNTIF(Inventory!D4:D6,\"REORDER\")";

// Apply consistent formatting across all sheets
foreach (WorkSheet sheet in companyReport.WorkSheets)
{
    sheet["A1"].Style.Font.Bold = true;
    sheet["A1"].Style.Font.Height = 14;
}
companyReport.SaveAs("CompanyReport.xlsx");
using IronXL;
WorkBook companyReport = WorkBook.Create();
// Create department sheets
WorkSheet salesSheet = companyReport.CreateWorkSheet("Sales");
WorkSheet inventorySheet = companyReport.CreateWorkSheet("Inventory");
WorkSheet summarySheet = companyReport.CreateWorkSheet("Summary");

// Populate Sales sheet
salesSheet["A1"].Value = "Sales Dashboard";
salesSheet["A3"].Value = "Region";
salesSheet["B3"].Value = "Q1 Sales";
salesSheet["C3"].Value = "Q2 Sales";
string[] regions = { "North", "South", "East", "West" };
decimal[] q1Sales = { 250000, 180000, 220000, 195000 };
decimal[] q2Sales = { 275000, 195000, 240000, 210000 };
for (int i = 0; i < regions.Length; i++)
{
    salesSheet[$"A{i + 4}"].Value = regions[i];
    salesSheet[$"B{i + 4}"].Value = q1Sales[i];
    salesSheet[$"C{i + 4}"].Value = q2Sales[i];
}

// Populate Inventory sheet
inventorySheet["A1"].Value = "Inventory Status";
string[] products = { "Widget A", "Widget B", "Widget C" };
int[] stock = { 150, 45, 200 };
int[] reorderPoint = { 100, 50, 75 };
for (int i = 0; i < products.Length; i++)
{
    inventorySheet[$"A{i + 4}"].Value = products[i];
    inventorySheet[$"B{i + 4}"].Value = stock[i];
    inventorySheet[$"C{i + 4}"].Value = reorderPoint[i];
    string status = stock[i] <= reorderPoint[i] ? "REORDER" : "OK";
    inventorySheet[$"D{i + 4}"].Value = status;
    if (status == "REORDER")
        inventorySheet[$"D{i + 4}"].Style.Font.Color = "#FF0000";
}

// Summary sheet with cross-sheet formulas
summarySheet["A1"].Value = "Company Overview";
summarySheet["A4"].Value = "Total Q1 Sales";
summarySheet["B4"].Formula = "=SUM(Sales!B4:B7)";
summarySheet["A5"].Value = "Total Q2 Sales";
summarySheet["B5"].Formula = "=SUM(Sales!C4:C7)";
summarySheet["A6"].Value = "Products Need Reorder";
summarySheet["B6"].Formula = "=COUNTIF(Inventory!D4:D6,\"REORDER\")";

// Apply consistent formatting across all sheets
foreach (WorkSheet sheet in companyReport.WorkSheets)
{
    sheet["A1"].Style.Font.Bold = true;
    sheet["A1"].Style.Font.Height = 14;
}
companyReport.SaveAs("CompanyReport.xlsx");
$vbLabelText   $csharpLabel

この例は、完全なマルチシートレポートを作成します。 各ワークシートは、売上データ、在庫追跡、概要ビューなど、特定の目的に使用されます。 サマリシートは、クロスシートフォーミュラを使用して主要指標を統合します。 シート参照構文に注意してください。"Sales!B4:B7"は、Sales シートのセル B4 から B7 を参照します。

在庫シートは条件付きロジックを示し、在庫が少ないアイテムを赤色で塗りつぶして直ちに注意を引きます。 foreach ループは、すべてのシートに一貫した書式を適用し、ワークブック全体でプロフェッショナルな外観を維持します。 シート名は Excel のタブとして表示されるため、ユーザーはさまざまなデータ ビュー間を簡単に移動できます。

C# で Excel ファイルを生成するためのベスト プラクティスは何ですか?

C# での効率的な Excel ファイル生成には、メモリ使用量、エラーハンドリング、デプロイメントへの思慮深いアプローチが必要です。 これらのプラクティスは、Excel スプレッドシートをプログラム的に作成する際に、アプリケーションが効果的にスケールし、信頼性を維持することを保証します。

メモリ管理は、大きなファイルで重要になります。 データセット全体を一度に読み込むのではなく、データをバッチで処理します。 次のパターンにより、大量のエクスポートのメモリ使用量を予測可能に保つことができます。

using IronXL;
WorkBook workbook = WorkBook.Create();
WorkSheet sheet = workbook.CreateWorkSheet("Data");
int rowsPerBatch = 1000;
int currentRow = 2;
sheet["A1"].Value = "ID";
sheet["B1"].Value = "Name";
sheet["C1"].Value = "Value";
// Process records in manageable batches
foreach (var batch in GetDataInBatches(rowsPerBatch))
{
    foreach (var record in batch)
    {
        sheet[$"A{currentRow}"].Value = record.Id;
        sheet[$"B{currentRow}"].Value = record.Name;
        sheet[$"C{currentRow}"].Value = record.Value;
        currentRow++;
    }
}
workbook.SaveAs("LargeDataset.xlsx");
using IronXL;
WorkBook workbook = WorkBook.Create();
WorkSheet sheet = workbook.CreateWorkSheet("Data");
int rowsPerBatch = 1000;
int currentRow = 2;
sheet["A1"].Value = "ID";
sheet["B1"].Value = "Name";
sheet["C1"].Value = "Value";
// Process records in manageable batches
foreach (var batch in GetDataInBatches(rowsPerBatch))
{
    foreach (var record in batch)
    {
        sheet[$"A{currentRow}"].Value = record.Id;
        sheet[$"B{currentRow}"].Value = record.Name;
        sheet[$"C{currentRow}"].Value = record.Value;
        currentRow++;
    }
}
workbook.SaveAs("LargeDataset.xlsx");
$vbLabelText   $csharpLabel

Web アプリケーションの場合、一時ファイルをディスクに書き込むのではなく、メモリ内に Excel ファイルを生成し、ユーザーに直接ストリーミングします。 クラッシュを防ぎ、有意義なフィードバックを提供するために、常に生成ロジックをエラー処理内にラップします。

// ASP.NET Core controller action with error handling
IActionResult DownloadExcel()
{
    try
    {
        WorkBook workbook = WorkBook.Create();
        WorkSheet sheet = workbook.CreateWorkSheet("Report");
        sheet["A1"].Value = "Report Data";
        // Populate report data here...
        var stream = new MemoryStream();
        workbook.SaveAs(stream);
        stream.Position = 0;
        return File(stream,
            "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
            "report.xlsx");
    }
    catch (Exception ex)
    {
        Console.WriteLine($"Excel generation failed: {ex.Message}");
        return StatusCode(500, "Failed to generate Excel file.");
    }
}
// ASP.NET Core controller action with error handling
IActionResult DownloadExcel()
{
    try
    {
        WorkBook workbook = WorkBook.Create();
        WorkSheet sheet = workbook.CreateWorkSheet("Report");
        sheet["A1"].Value = "Report Data";
        // Populate report data here...
        var stream = new MemoryStream();
        workbook.SaveAs(stream);
        stream.Position = 0;
        return File(stream,
            "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
            "report.xlsx");
    }
    catch (Exception ex)
    {
        Console.WriteLine($"Excel generation failed: {ex.Message}");
        return StatusCode(500, "Failed to generate Excel file.");
    }
}
$vbLabelText   $csharpLabel

以下の表は、主要なベスト プラクティスとそれを適用するタイミングをまとめたものです。

IronXL C# での Excel 生成のベストプラクティス
シナリオ 推奨されるアプローチ 利点
Large datasets (>10,000 rows) チャンク書き込みによるバッチ処理 メモリフットプリントの削減
Webアプリケーションのダウンロード 一時ファイルの代わりにMemoryStreamを使用する ディスクIOなし、応答が速い
本番環境への展開 有効なIronXLライセンスキーを含める 生成されたファイルに透かしはありません
通貨と日付 FormatStringプロパティを使用する Excel での正しいロケール表示
動的レポート SaveAs() の前に EvaluateAll() を呼び出す 数式は計算された値を表示します

IronXL は、昇格された権限なしで制限された環境で動作し、共有ホスティングおよびコンテナ化されたデプロイメントに適しています。 デプロイメント パッケージにIronXLライセンス ファイルを含め、必要な一時ファイル操作に対する書き込み権限がアプリケーションにあることを確認します。 追加の展開ガイダンスについては、 IronXL機能の概要と完全なAPI ドキュメントを参照してください。

ここからどこへ行けますか?

IronXL は、Excel ファイル生成を C# での複雑なチャレンジから簡単なコーディングに変えます。 ワークブックの作成、セルへのデータ入力、書式の適用、数式の使用、データベース データのエクスポート、複数のワークシートの管理を、Microsoft Office に依存せずに実行する方法を学びました。 これらの手法は、 .NET 10 を対象とする Windows、Linux、クラウド プラットフォームで一貫して機能します。

さらに詳しく知りたい場合は、既存の Excel ファイルの読み取りと変更に関するIronXLハウツー ガイドを参照するか、試用ライセンス ページを参照して本番環境を開始してください。 プロジェクトの要件と規模に合ったライセンス オプションを表示します。

 IronXLを使用して C# で Excel ファイルを生成する方法: 画像 11 - ライセンス

よくある質問

C#を使用してExcelファイルを生成するにはどうすればよいですか?

IronXLを使用すると、C# で Excel ファイルを生成できます。IronXL は、Microsoft Office のインストールや複雑な COM Interop を必要とせずに Excel ファイルを作成するためのシンプルな API を提供します。

C#でExcelファイルを操作するにはMicrosoft Officeが必要ですか?

いいえ、Microsoft Officeは必要ありません。IronXLを使用すると、Officeに依存せずにC#でExcelファイルを作成および操作できます。

IronXLを従来の方法よりも使用する利点は何ですか?

IronXL は、Microsoft Office と複雑な COM Interop の必要性を排除し、Excel ファイルの作成と操作のための簡単な API を提供することで、Excel ファイルの生成プロセスを簡素化します。

IronXLを使用してデータベースを Excel ファイルと統合できますか?

はい、 IronXL はデータベース統合などの高度な操作をサポートしており、データを Excel ファイルに効率的にエクスポートできます。

IronXLで生成できるファイル形式は何ですか?

IronXL を使用すると、XLS と XLSX の両方のファイル形式を作成できるため、さまざまな Excel ファイル生成ニーズに柔軟に対応できます。

IronXL はExcel ファイルの高度な書式設定をサポートしていますか?

はい、 IronXL は高度な書式設定機能をサポートしており、Excel ファイルの外観と構造をカスタマイズできます。

IronXLを使用してスプレッドシートの生成を自動化することは可能ですか?

はい、 IronXL はスプレッドシートの生成を自動化し、レポート作成やデータのエクスポートなどのプロセスを合理化するツールとテクニックを提供します。

.NETアプリケーションで Excel を使用してレポートを作成するにはどうすればよいですか?

IronXL は、 .NETアプリケーション内で直接 Excel ファイルを生成することでレポートを簡単に作成する方法を提供し、データ プレゼンテーションのための強力なソリューションを提供します。

C# で Excel を操作するために必須のテクニックは何ですか?

IronXLを使用して C# で Excel を操作するための基本的なテクニックには、基本的なスプレッドシートの作成、高度な書式設定、データベース統合などがあります。

IronXL をC# で使用するためのドキュメントはどこにありますか?

Iron Software のWeb サイトには、C# でIronXL を使用するための包括的なドキュメントがあり、さまざまなユースケースのチュートリアルと例が含まれています。

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

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