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

IronXLを使用して C# で既存の Excel テンプレートにデータをエクスポートする方法

Microsoft Excel テンプレートを使用すると、書式、数式、レイアウトを保持しながら、データを動的に入力できます。 このチュートリアルでは、Microsoft Office や Excel 相互運用性などの依存関係を必要とせずに、 IronXLを使用して既存の Excel ワークシート テンプレートにデータをエクスポートする方法を説明します。あらかじめデザインされたテンプレートの読み込み、プレースホルダー マーカーの置き換え、表形式のデータの書き込み、一般的なエッジケースの処理、そしてあらゆる.NET 10 アプリケーションでプロフェッショナルな XLSX 出力を保存する方法を学習します。

Microsoft Office がインストールされていない状態で既存の Excel テンプレートにエクスポートする必要がある場合、 IronXL は、辞書、リスト、DataTable オブジェクト、およびデータベース クエリ結果からのデータの挿入をサポートする高性能ソリューションを提供します。 テンプレートがフォーマットされた請求書、月次ダッシュボード、コンプライアンス レポートのいずれであっても、 IronXL はプログラムによってテンプレートを入力し、そのプロセスですべてのスタイル ルール、数式、条件付き書式を保持します。

 IronXLを使用して C# で Excel データを既存の Excel ファイル テンプレートにエクスポートする方法: 画像 1 - IronXL

Excel テンプレートによりレポート生成が改善されるのはなぜですか?

Excel テンプレートを使用すると、スプレッドシートを最初から作成するよりも大きな利点があります。 テンプレートは、プロフェッショナルな書式設定、複雑な数式、条件付き書式設定ルール、組織ですでに承認されている検証済みのデータ構造を維持します。 財務チーム、運用部門、コンプライアンス グループには、請求書、ダッシュボード、規制提出書類用の標準化されたテンプレートが用意されていることが多く、データベース、API、またはメモリ内コレクションからの最新データを取り込みながら、デザインを維持する必要があります。

既存のテンプレートをプログラムで設定することで、書式設定の作業時間を節約し、生成されるすべてのドキュメントの一貫性を保証できます。 IronXL は、Office のインストールを必要とせずに XLSX、XLS、XLSM、XLTX 形式をサポートしているため、Microsoft Office のインストールが非現実的または不可能なサーバー環境、Docker コンテナー、クラウド パイプラインに適しています。

テンプレートベースのアプローチの主な利点:

-数式の保存- 既存のSUM、AVERAGE、およびルックアップ数式は、データの書き込み後に自動的に再計算されます。 -スタイルの保持- フォント、境界線、セルの色、数値の書式は設計どおりに保持されます -条件付き書式- セル範囲に関連付けられたルールは、新しいデータ値に基づいて引き続き実行されます。

  • Office への依存なし- IronXL は、Excel ファイルを完全にマネージド.NETコードで読み書きします。 -クロスプラットフォームサポート- .NET 10環境を含むWindows、Linux、macOSで実行可能

 IronXLを使用して C# で Excel データを既存の Excel ファイル テンプレートにエクスポートする方法: 画像 2 - クロス プラットフォーム

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

まず、 NuGetを通じてIronXL をインストールします。 パッケージマネージャーコンソールを開いて次を実行します:

Install-Package IronXL
Install-Package IronXL
SHELL

または.NET CLIを使用します:

dotnet add package IronXL
dotnet add package IronXL
SHELL

 IronXLを使用して C# で Excel データを既存の Excel ファイル テンプレートにエクスポートする方法: 画像 3 - インストール

IronXL は、Microsoft Office をインストールする必要がなく独立して動作するため、サーバー環境やクロスプラットフォーム アプリケーションに最適です。 詳細なセットアップ手順については、 IronXLスタートガイドをご覧ください。 このライブラリは、Windows、Linux、macOS で実行される.NET Framework、 .NET Core、 .NET 5 から.NET 10 を対象としています。

インストール後、ファイルの先頭に名前空間を追加します。

using IronXL;
using IronXL;
$vbLabelText   $csharpLabel

 IronXLを使用して C# で Excel データを既存の Excel ファイル テンプレートにエクスポートする方法: 画像 4 - 機能

既存の Excel テンプレートを読み込んで入力するにはどうすればよいですか?

既存のテンプレートの読み込みは、IronXL のWorkBook.Load()メソッドを使用すると簡単に行えます。 以下の例では、四半期売上レポート テンプレートを開き、トップレベルのステートメントを使用して特定のセルにデータを入力します。

using IronXL;

// Load the existing Excel template
WorkBook workbook = WorkBook.Load("ReportTemplate.xlsx");
WorkSheet sheet = workbook.DefaultWorkSheet;

// Write header values to named cells
sheet["B2"].Value = "Q4 2025 Sales Report";
sheet["C4"].StringValue = DateTime.Now.ToString("MMMM dd, yyyy");
sheet["C6"].DecimalValue = 125000.50m;
sheet["C7"].DecimalValue = 98500.75m;

// Add a profit formula -- Excel recalculates automatically
sheet["C8"].Formula = "=C6-C7";

// Populate a column range with monthly data
decimal[] monthlyData = { 10500, 12300, 15600, 11200 };
for (int i = 0; i < monthlyData.Length; i++)
{
    sheet[$"E{10 + i}"].DecimalValue = monthlyData[i];
}

// Save the populated file
workbook.SaveAs("Q4_Sales_Report.xlsx");
using IronXL;

// Load the existing Excel template
WorkBook workbook = WorkBook.Load("ReportTemplate.xlsx");
WorkSheet sheet = workbook.DefaultWorkSheet;

// Write header values to named cells
sheet["B2"].Value = "Q4 2025 Sales Report";
sheet["C4"].StringValue = DateTime.Now.ToString("MMMM dd, yyyy");
sheet["C6"].DecimalValue = 125000.50m;
sheet["C7"].DecimalValue = 98500.75m;

// Add a profit formula -- Excel recalculates automatically
sheet["C8"].Formula = "=C6-C7";

// Populate a column range with monthly data
decimal[] monthlyData = { 10500, 12300, 15600, 11200 };
for (int i = 0; i < monthlyData.Length; i++)
{
    sheet[$"E{10 + i}"].DecimalValue = monthlyData[i];
}

// Save the populated file
workbook.SaveAs("Q4_Sales_Report.xlsx");
$vbLabelText   $csharpLabel

このコードは、事前に設計されたテンプレートを読み込み、既存の書式設定をすべて維持し、特定のセルにデータを入力します。 DecimalValueプロパティは、数値データが適切な通貨または小数点の書式を保持することを保証します。 数式セルは隣接するデータが変更されると自動的に再計算されるため、テンプレートの計算ロジックはそのまま維持されます。

Excel のセル参照と範囲の操作方法については、 IronXL のセルと範囲のドキュメントを参照してください。 IronXL の例ページを使用して、追加のパターンを調べることもできます。

入力

 IronXLを使用して C# で Excel データを既存の Excel ファイル テンプレートにエクスポートする方法: 画像 5 - サンプル テンプレート入力

出力

 IronXLを使用して C# で Excel データを既存の Excel ファイル テンプレートにエクスポートする方法: 画像 6 - Excel テンプレートの出力を読み込む

テンプレート内のプレースホルダー マーカーを置き換えるにはどうすればよいでしょうか?

多くのテンプレートでは、実際の実行時値に置き換える必要があるプレースホルダー テキスト マーカー (たとえば、{{CustomerName}} または {{InvoiceDate}}) が使用されています。 IronXL は、定義された範囲でのセル反復を通じてこれを処理します。 このパターンは、請求書の生成、契約書の作成、パーソナライズされたレポートの作成に特に役立ちます。

using IronXL;

// Load an invoice template containing placeholder markers
WorkBook workbook = WorkBook.Load("InvoiceTemplate.xlsx");
WorkSheet sheet = workbook.DefaultWorkSheet;

// Iterate over a range and replace placeholder text
foreach (var cell in sheet["A1:H50"])
{
    if (cell.Text.Contains("{{CustomerName}}"))
        cell.Value = cell.Text.Replace("{{CustomerName}}", "Acme Corporation");

    if (cell.Text.Contains("{{InvoiceDate}}"))
        cell.Value = cell.Text.Replace("{{InvoiceDate}}", DateTime.Now.ToShortDateString());

    if (cell.Text.Contains("{{InvoiceNumber}}"))
        cell.Value = cell.Text.Replace("{{InvoiceNumber}}", "INV-2025-001");
}

// Append line items starting at row 15
var items = new[]
{
    new { Description = "Software License", Qty = 5, Price = 299.99 },
    new { Description = "Support Package",  Qty = 1, Price = 999.99 }
};

int startRow = 15;
foreach (var item in items)
{
    sheet[$"B{startRow}"].Value      = item.Description;
    sheet[$"E{startRow}"].IntValue   = item.Qty;
    sheet[$"F{startRow}"].DoubleValue = item.Price;
    sheet[$"G{startRow}"].Formula    = $"=E{startRow}*F{startRow}";
    startRow++;
}

workbook.SaveAs("GeneratedInvoice.xlsx");
using IronXL;

// Load an invoice template containing placeholder markers
WorkBook workbook = WorkBook.Load("InvoiceTemplate.xlsx");
WorkSheet sheet = workbook.DefaultWorkSheet;

// Iterate over a range and replace placeholder text
foreach (var cell in sheet["A1:H50"])
{
    if (cell.Text.Contains("{{CustomerName}}"))
        cell.Value = cell.Text.Replace("{{CustomerName}}", "Acme Corporation");

    if (cell.Text.Contains("{{InvoiceDate}}"))
        cell.Value = cell.Text.Replace("{{InvoiceDate}}", DateTime.Now.ToShortDateString());

    if (cell.Text.Contains("{{InvoiceNumber}}"))
        cell.Value = cell.Text.Replace("{{InvoiceNumber}}", "INV-2025-001");
}

// Append line items starting at row 15
var items = new[]
{
    new { Description = "Software License", Qty = 5, Price = 299.99 },
    new { Description = "Support Package",  Qty = 1, Price = 999.99 }
};

int startRow = 15;
foreach (var item in items)
{
    sheet[$"B{startRow}"].Value      = item.Description;
    sheet[$"E{startRow}"].IntValue   = item.Qty;
    sheet[$"F{startRow}"].DoubleValue = item.Price;
    sheet[$"G{startRow}"].Formula    = $"=E{startRow}*F{startRow}";
    startRow++;
}

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

このアプローチでは、定義されたセル範囲内のマーカーを検索し、実際の値に置き換えます。 テンプレートの書式設定 (フォント、色、境界線、数値の形式) は、全体にわたってそのまま残ります。 実行時のより高度なスタイル変更については、背景色、フォント プロパティ、境界線のスタイルについて説明しているIronXLセル スタイル ガイドを参照してください。

反復処理に適切なセル範囲を選択するにはどうすればよいでしょうか?

プレースホルダーを見つけるために反復処理を実行するときは、不必要に大きくならずにマーカーを含むすべてのセルをカバーする範囲を選択します。 "A1:H50" のような範囲は、ほとんどの請求書テンプレートに効率的です。 データが数百行に渡って分散しているテンプレートの場合は、反復をヘッダー セクションに制限し、データ本体には直接セル アドレス指定を使用します。 これにより、大規模なワークブックでもパフォーマンスを予測できるようになります。

欠落または一致しないプレースホルダーをどのように処理しますか?

テンプレートのバージョンが異なる場合に例外を回避するには、.Replace() を呼び出す前に null または空のチェックを追加します。 デバッグのために未解決のプレースホルダーをログに記録できます。

using IronXL;

WorkBook workbook = WorkBook.Load("InvoiceTemplate.xlsx");
WorkSheet sheet = workbook.DefaultWorkSheet;

var replacements = new Dictionary<string, string>
{
    { "{{CustomerName}}", "Acme Corporation" },
    { "{{InvoiceDate}}", DateTime.Now.ToShortDateString() },
    { "{{InvoiceNumber}}", "INV-2025-002" }
};

foreach (var cell in sheet["A1:H50"])
{
    if (string.IsNullOrEmpty(cell.Text)) continue;

    foreach (var replacement in replacements)
    {
        if (cell.Text.Contains(replacement.Key))
            cell.Value = cell.Text.Replace(replacement.Key, replacement.Value);
    }
}

workbook.SaveAs("GeneratedInvoice_Safe.xlsx");
using IronXL;

WorkBook workbook = WorkBook.Load("InvoiceTemplate.xlsx");
WorkSheet sheet = workbook.DefaultWorkSheet;

var replacements = new Dictionary<string, string>
{
    { "{{CustomerName}}", "Acme Corporation" },
    { "{{InvoiceDate}}", DateTime.Now.ToShortDateString() },
    { "{{InvoiceNumber}}", "INV-2025-002" }
};

foreach (var cell in sheet["A1:H50"])
{
    if (string.IsNullOrEmpty(cell.Text)) continue;

    foreach (var replacement in replacements)
    {
        if (cell.Text.Contains(replacement.Key))
            cell.Value = cell.Text.Replace(replacement.Key, replacement.Value);
    }
}

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

置換辞書を使用すると、新しいプレースホルダー タイプがテンプレートに追加されたときに、コードの保守と拡張が容易になります。

テンプレートから月次レポートを生成するにはどうすればよいですか?

これは、事前にフォーマットされたセル、グラフ、パーセンテージの数式を含む既存の Excel テンプレートから月次売上レポートを生成する実際の例です。 コードはトップレベルのステートメントを使用し、製品と売上のマッピングの辞書を受け入れます。

using IronXL;

// Load the monthly report template
WorkBook workbook = WorkBook.Load("MonthlyReportTemplate.xlsx");
WorkSheet sheet = workbook.GetWorkSheet("Monthly Report");

// Build sample sales data
var salesData = new Dictionary<string, decimal>
{
    { "Product A", 42500.00m },
    { "Product B", 31750.50m },
    { "Product C", 18300.25m }
};

// Write report header
sheet["B2"].Value = $"Sales Report - {DateTime.Now:MMMM yyyy}";
sheet["B3"].Value = $"Generated: {DateTime.Now:g}";

// Write each product row starting at row 6
int currentRow = 6;
decimal totalSales = salesData.Values.Sum();

foreach (var sale in salesData)
{
    sheet[$"B{currentRow}"].Value = sale.Key;
    sheet[$"C{currentRow}"].DecimalValue = sale.Value;
    // Percentage of total formula
    sheet[$"D{currentRow}"].Formula = $"=C{currentRow}/C{currentRow + salesData.Count}*100";
    currentRow++;
}

// Write the total row and apply bold style
sheet[$"C{currentRow}"].DecimalValue = totalSales;
sheet[$"C{currentRow}"].Style.Font.Bold = true;

// Save with a date-stamped filename
string outputPath = $"Reports/Monthly_Report_{DateTime.Now:yyyyMMdd}.xlsx";
workbook.SaveAs(outputPath);
using IronXL;

// Load the monthly report template
WorkBook workbook = WorkBook.Load("MonthlyReportTemplate.xlsx");
WorkSheet sheet = workbook.GetWorkSheet("Monthly Report");

// Build sample sales data
var salesData = new Dictionary<string, decimal>
{
    { "Product A", 42500.00m },
    { "Product B", 31750.50m },
    { "Product C", 18300.25m }
};

// Write report header
sheet["B2"].Value = $"Sales Report - {DateTime.Now:MMMM yyyy}";
sheet["B3"].Value = $"Generated: {DateTime.Now:g}";

// Write each product row starting at row 6
int currentRow = 6;
decimal totalSales = salesData.Values.Sum();

foreach (var sale in salesData)
{
    sheet[$"B{currentRow}"].Value = sale.Key;
    sheet[$"C{currentRow}"].DecimalValue = sale.Value;
    // Percentage of total formula
    sheet[$"D{currentRow}"].Formula = $"=C{currentRow}/C{currentRow + salesData.Count}*100";
    currentRow++;
}

// Write the total row and apply bold style
sheet[$"C{currentRow}"].DecimalValue = totalSales;
sheet[$"C{currentRow}"].Style.Font.Bold = true;

// Save with a date-stamped filename
string outputPath = $"Reports/Monthly_Report_{DateTime.Now:yyyyMMdd}.xlsx";
workbook.SaveAs(outputPath);
$vbLabelText   $csharpLabel

この方法では、標準化されたテンプレートが入力され、貢献率が自動的に計算され、テンプレートのプロフェッショナルな外観が維持されます。 テンプレート内の既存のグラフは、ソース範囲が変更されないため、新しいデータ値に基づいて更新されます。

DataTable または DataSet からデータを転送する場合、列名を保持し、最初の行をヘッダーとして扱います。 DataTable オブジェクトからのインポートの詳細については、 IronXL DataTable のドキュメントを参照してください。

入力

 IronXLを使用して C# で Excel データを既存の Excel ファイル テンプレートにエクスポートする方法: 画像 7 - Excel テンプレートの入力

出力

 IronXLを使用して C# で Excel データを既存の Excel ファイル テンプレートにエクスポートする方法: 画像 8 - 月次レポート出力

一般的なテンプレート エラーをトラブルシューティングするにはどうすればよいですか?

テンプレートを使用する場合、いくつかの問題が定期的に発生します。 次の表は、各症状とその原因および解決策を示しています。

IronXLテンプレートの一般的なエラーと解決策
症状 考えられる原因 解決
ロード時にFileNotFoundExceptionが発生する ファイルパスまたは作業ディレクトリが正しくありません 信頼できるパスには`Path.Combine(AppContext.BaseDirectory, "template.xlsx")`を使用します
古い値を表示する数式 書き込み後に自動計算が実行されない 保存する前に`sheet.Calculate()`を呼び出す
パスワードで保護されたテンプレートが開けない テンプレートにはワークブックまたはシートのパスワードが設定されています パスワードを渡します: `WorkBook.Load("template.xlsx", "password")`
大容量データによるメモリ使用量の増加 書き込み中にワークブック全体がメモリに保持される ストリーミングで`workbook.SaveAs()`を使用し、保存後にワークブックを破棄します。
書き込み後にセルの書式が失われる セルスタイルオブジェクトを直接上書きする 値/数式のみを設定する - スタイルオブジェクト全体を置き換えないようにする
チャートデータが更新されない チャートのソース範囲外への書き込み データ行が、グラフに入力される名前付き範囲またはテーブル内に収まるようにします。

パスワードで保護されたファイルの場合は、WorkBook.Load の 2 番目の引数としてパスワードを指定します。 データの書き込み後に数式が更新されない場合は、workbook.SaveAs() を呼び出す前に sheet.Calculate() を呼び出します。 大規模なデータセットの場合、保存後にワークブック オブジェクトを破棄して、マネージド メモリとアンマネージド メモリをすぐに解放します。

追加のトラブルシューティング リソースは、 IronXLトラブルシューティング ドキュメントおよびIronXL API リファレンスで入手できます。

IronXL は他にどのような Excel 操作をサポートしていますか?

テンプレートの作成以外にも、 IronXL は上記のワークフローを補完する幅広い Excel 操作機能を提供します。

これらの機能はテンプレートの作成と統合されているため、単一のワークフローでテンプレートを読み込み、テンプレートを作成し、機密性の高い数式セルを保護し、XLSX コピーと PDF バージョンの両方を 1 回のパスでエクスポートできます。

IronXL はXML などの他のデータ交換形式とも適切に統合されており、構造化データをインポートして変換し、結果をテンプレートにエクスポートすることができます。 データベース駆動型レポート生成とのより高度な統合については、 IronXLブログのコミュニティ チュートリアルを参照してください。

 IronXLを使用して C# で Excel データを既存の Excel ファイル テンプレートにエクスポートする方法: 画像 9 - ライセンス

生産現場でIronXLを使い始めるにはどうすればよいでしょうか?

IronXLは開発およびテストには無料でご利用いただけます。 展開の準備ができたら、個々の開発者、チーム、OEM 再配布をカバーする柔軟なライセンス オプションから選択します。 プロジェクトに適したオプションを見つけるには、 IronXLライセンス ページにアクセスしてください。

すぐに始めるには、無料の試用版をダウンロードし、このチュートリアルのコード例を独自のテンプレートに対して実行してください。 IronXL NuGetページでは、バージョン履歴とパッケージの詳細が提供されます。 コミュニティのディスカッションと追加の例は、 Iron Software GitHubリポジトリで入手できます。 XLSX ファイルの基盤となる Open XML ファイル形式の背景については、 ECMA-376 仕様の概要を参照してください。

IronXLと他の選択肢を比較評価する組織向けに、 IronXL比較ガイドでは機能の違い、ライセンス モデル、パフォーマンス ベンチマークを取り上げており、十分な情報に基づいた決定を下すのに役立ちます。

よくある質問

C#で既存のExcelテンプレートにデータをエクスポートする方法を教えてください。

IronXLを使用すると、Microsoft Officeを使用することなく、C#で既存のExcelテンプレートにデータをエクスポートできます。IronXLを使用すると、Excelテンプレートの書式、数式、レイアウトを維持したまま、動的なデータを入力することができます。

IronXLをExcelテンプレートのエクスポートに使用する利点は何ですか?

IronXLは、Excel InteropやMicrosoft Officeに依存することなく、テンプレートの書式設定を保持し、データセットオブジェクトのようなさまざまなソースからのデータ挿入などの高度な機能を提供する高性能なソリューションを提供します。

IronXLを使用するにはMicrosoft Officeがインストールされている必要がありますか?

IronXLはMicrosoft Officeのインストールを必要としません。独立して動作するため、Officeに依存することなくExcelファイルやテンプレートを扱うことができます。

IronXLは数式を含む複雑なExcelテンプレートを処理可能であり、データをエクスポートした後も数式がそのまま機能します。

IronXLは数式を含む複雑なExcelテンプレートを扱うことができ、データをエクスポートする際に既存の機能やレイアウトを維持することができます。

IronXLはどのようなデータソースをExcelテンプレートにエクスポートできますか?

IronXLはデータセットオブジェクトを含む様々なソースからデータをエクスポートすることができ、Excelテンプレートに必要なデータを柔軟に入力することができます。

IronXLはどのようにワークフローの効率を改善しますか?

IronXLはOfficeに依存することなく既存のExcelテンプレートにシームレスにデータをエクスポートできるため、レポート作成プロセスを合理化し、時間とリソースを節約します。

IronXLはプロフェッショナルなExcelシートの出力に適していますか?

IronXLは、テンプレートの整合性を維持し、高品質のデータ統合を保証することで、プロフェッショナルな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