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

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

Microsoft Excelテンプレートを使用することで、データを動的に入力しながら、書式、数式、およびレイアウトを保持してレポート生成を効率化します。 このチュートリアルでは、IronXLを使用して既存のExcelワークシートテンプレートにデータを効率的にエクスポートする方法を示します。以下の例では、データをExcelテンプレートに書き出し、プロフェッショナルなExcelシート出力を作成する方法を示します。 Microsoft Officeがインストールされていない既存のExcelテンプレートにエクスポートする方法を探しているとします。 その場合、このExcelライブラリは、さまざまなソース(データセットオブジェクトを含む)からデータを挿入できるより高度な機能を備えたクリーンで高性能なソリューションを提供します。

Excelワークブックに加えて、IronXLはXMLファイルなどの他のデータ交換形式ともよく統合し、開発者が構造化データをシステム間でインポート、エクスポート、または変換することを容易にします。 データベースやシステムファイルからExcelにデータを書き込む必要がある場合でも、このライブラリは.NETアプリケーションとのシームレスな統合をサポートします。

How to Export Excel Data to Existing Excel File Templates in C# Using IronXL: Image 1 - IronXL.

データエクスポートにExcelテンプレートを使用する理由

Excelテンプレートは、ゼロからスプレッドシートを作成するよりも大きな利点を提供します。 テンプレートはプロフェッショナルな書式、複雑な数式、条件付き書式ルール、検証済みデータ構造を維持します。 組織はしばしば、インボイス、レポート、ダッシュボードのための標準化されたテンプレートを持っており、これらはデータベース、API、またはデータテーブルのようなコレクションオブジェクトから動的データを取り入れつつ、そのデザインを維持しなければなりません。 出力ファイルに条件付き書式やセル書式を適用する場合、テンプレートはXLSX形式で生成されるすべてのドキュメントで一貫性を確保します。

既存のテンプレートをプログラム的に埋めることにより、開発者は膨大な書式作業を節約し、生成されたすべてのドキュメント間で一貫性を保証します。 IronXLは、Officeインストールを必要とせずにXLSX、XLSファイル、XLSM、XLTXテンプレートを含むさまざまなExcel形式をサポートすることで、このプロセスをシームレスにします。 これらの操作のためのソースコードは、どのプロジェクトフォルダにも簡単に実装できる単純明快なものです。

How to Export Excel Data to Existing Excel File Templates in C# Using IronXL: Image 2 - Cross Platform.

テンプレート操作のためのIronXLのセットアップ

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

Install-Package IronXL.Excel
Install-Package IronXL.Excel
SHELL

How to Export Excel Data to Existing Excel File Templates in C# Using IronXL: Image 3 - InstallationHow to Export Excel Data to Existing Excel File Templates in C# Using IronXL: Image 3 - Installation

インストール後、必要な名前空間をC#ファイルに追加します。

using IronXL;
using IronXL;
Imports IronXL
$vbLabelText   $csharpLabel

IronXLはMicrosoft Officeのインストールを必要とせずに独立して動作し、サーバー環境やDockerコンテナ、クラウドプラットフォームを含むクロスプラットフォームアプリケーションに理想的です。 詳細なセットアップ手順や追加情報については、IronXLスタートガイドをご覧ください。 このライブラリはWindows、Linux、macOS環境全体で.NET Framework、.NET Core、および.NET 5+をサポートし、.NETアプリケーションに最適です。

How to Export Excel Data to Existing Excel File Templates in C# Using IronXL: Image 4 - Features.

Excelテンプレートの読み込みと埋め込み

既存のテンプレートのロードは、IronXLのWorkBook.Load()メソッドで簡単に行えます。 以下の例では、テンプレートを開き、データで埋め込む方法を示し、最初の行をヘッダーとして扱い、列名を効果的に管理します。

// Load the existing Excel template for data import
WorkBook workbook = WorkBook.Load("ReportTemplate.xlsx");
WorkSheet sheet = workbook.DefaultWorkSheet;
// Populate specific worksheet cells with data
sheet["B2"].Value = "Q4 2024 Sales Report";
sheet["C4"].StringValue = DateTime.Now.ToString("MMMM dd, yyyy");
sheet["C6"].DecimalValue = 125000.50m;
sheet["C7"].DecimalValue = 98500.75m;
sheet["C8"].Formula = "=C6-C7"; // Profit calculation
// Populate a range with array 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 template
workbook.SaveAs("Q4_Sales_Report.xlsx");
// Load the existing Excel template for data import
WorkBook workbook = WorkBook.Load("ReportTemplate.xlsx");
WorkSheet sheet = workbook.DefaultWorkSheet;
// Populate specific worksheet cells with data
sheet["B2"].Value = "Q4 2024 Sales Report";
sheet["C4"].StringValue = DateTime.Now.ToString("MMMM dd, yyyy");
sheet["C6"].DecimalValue = 125000.50m;
sheet["C7"].DecimalValue = 98500.75m;
sheet["C8"].Formula = "=C6-C7"; // Profit calculation
// Populate a range with array 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 template
workbook.SaveAs("Q4_Sales_Report.xlsx");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

このコードは既にデザインされたテンプレートを読み込み、既存のすべての書式を保持し、新しいデータを特定のセルに埋め込みます。 DecimalValueプロパティは、数値データが適切な書式を保持することを保証します。 数式セルは隣接するデータが変更されると自動的に再計算され、テンプレートの計算ロジックを保持します。 IronXLでのExcel数式の操作について詳しく学びましょう。

入力

How to Export Excel Data to Existing Excel File Templates in C# Using IronXL: Image 5 - Sample Template Input.

出力

How to Export Excel Data to Existing Excel File Templates in C# Using IronXL: Image 6 - Load Excel Template Output.

テンプレートプレースホルダーとの作業

多くのテンプレートは、実際のデータで置き換えが必要なプレースホルダーテキストマーカーを使用します。 IronXLはこのシナリオをセルの反復とテキスト置換を通じて効率的に処理します。 Excelテンプレートにデータを書き込んだり、動的なコンテンツを挿入したりする必要がある場合、このアプローチは最大限の柔軟性を提供します:

// Load template with placeholders
WorkBook workbook = WorkBook.Load("InvoiceTemplate.xlsx");
WorkSheet sheet = workbook.DefaultWorkSheet;
// Find and replace placeholder text in cells
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-2024-001");
}
// Populate line items dynamically
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");
// Load template with placeholders
WorkBook workbook = WorkBook.Load("InvoiceTemplate.xlsx");
WorkSheet sheet = workbook.DefaultWorkSheet;
// Find and replace placeholder text in cells
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-2024-001");
}
// Populate line items dynamically
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");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

このアプローチは、指定した範囲内のプレースホルダーマーカーを検索し、実際の値で置換します。 テンプレートの書式(フォント、色、境界線を含む)はプロセス全体でそのまま残ります。 より高度なシナリオのために、IronXLのセルスタイリングオプションを探索して、必要に応じて書式を動的に変更しましょう。

実世界での実装例

ここでは、既存のExcelテンプレートと事前に書式設定されたセルから月間売上報告書を生成する完全な例を紹介します。 このコードは、オブジェクト送信者のイベントを処理し、包括的なレポートを書き込む方法を示します。 システムデータベースやインメモリコレクションのデータを扱う場合、新しいDataTableや既存のDataSetを使用して効率的にデータをExcelにエクスポートし、テンプレートに入力することができます:

public void GenerateMonthlyReport(string templatePath, Dictionary<string, decimal> salesData)
{
    // Load the existing template file
    WorkBook workbook = WorkBook.Load(templatePath);
    WorkSheet sheet = workbook.GetWorkSheet("Monthly Report");
    // Set report header information
    sheet["B2"].Value = $"Sales Report - {DateTime.Now:MMMM yyyy}";
    sheet["B3"].Value = $"Generated: {DateTime.Now:g}";
    // Populate sales data starting from row 6
    int currentRow = 6;
    decimal totalSales = 0;
    foreach (var sale in salesData)
    {
        sheet[$"B{currentRow}"].Value = sale.Key;  // Product name
        sheet[$"C{currentRow}"].DecimalValue = sale.Value;  // Sales amount
        sheet[$"D{currentRow}"].Formula = $"=C{currentRow}/C${salesData.Count + 6}*100"; // Percentage formula
        totalSales += sale.Value;
        currentRow++;
    }
    // Update total row with sum
    sheet[$"C{currentRow}"].DecimalValue = totalSales;
    sheet[$"C{currentRow}"].Style.Font.Bold = true;
    // Save with timestamp
    string outputPath = $"Reports/Monthly_Report_{DateTime.Now:yyyyMMdd}.xlsx";
    workbook.SaveAs(outputPath);
}
public void GenerateMonthlyReport(string templatePath, Dictionary<string, decimal> salesData)
{
    // Load the existing template file
    WorkBook workbook = WorkBook.Load(templatePath);
    WorkSheet sheet = workbook.GetWorkSheet("Monthly Report");
    // Set report header information
    sheet["B2"].Value = $"Sales Report - {DateTime.Now:MMMM yyyy}";
    sheet["B3"].Value = $"Generated: {DateTime.Now:g}";
    // Populate sales data starting from row 6
    int currentRow = 6;
    decimal totalSales = 0;
    foreach (var sale in salesData)
    {
        sheet[$"B{currentRow}"].Value = sale.Key;  // Product name
        sheet[$"C{currentRow}"].DecimalValue = sale.Value;  // Sales amount
        sheet[$"D{currentRow}"].Formula = $"=C{currentRow}/C${salesData.Count + 6}*100"; // Percentage formula
        totalSales += sale.Value;
        currentRow++;
    }
    // Update total row with sum
    sheet[$"C{currentRow}"].DecimalValue = totalSales;
    sheet[$"C{currentRow}"].Style.Font.Bold = true;
    // Save with timestamp
    string outputPath = $"Reports/Monthly_Report_{DateTime.Now:yyyyMMdd}.xlsx";
    workbook.SaveAs(outputPath);
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

この方法は、売上データを受け入れ、標準化されたテンプレートを埋め込み、パーセンテージと合計を自動的に計算しながら、テンプレートのプロフェッショナルな外観を保持します。 テンプレート内の既存のチャートと条件付き書式は、新しいデータに基づいて自動的に更新されます。 注: DataTableオブジェクトまたはDataSetコレクションからExcelにデータを転送する場合、列名を保持し、最初の行をヘッダーとして扱います。

辞書からデータを書き込んだり、データベースクエリから値を挿入したり、さまざまなシステムソースからExcelにデータをエクスポートする必要がある場合、この以下の例のアプローチはシームレスに動作します。 簡単にアクセスできるように、指定したフォルダに出力ファイルを保存してください。 DataTablesの操作についての詳細情報は、DataTableのインポートドキュメントとソースコードの例を参照してください。

入力

How to Export Excel Data to Existing Excel File Templates in C# Using IronXL: Image 7 - Excel Template Input.

出力

How to Export Excel Data to Existing Excel File Templates in C# Using IronXL: Image 8 - Monthly Report Output.

一般的な問題のトラブルシューティング

テンプレートを操作する際には、ファイルパスが正しいことやテンプレートが他のプロセスによってロックされていないことを確認してください。 パスワードで保護されたテンプレートには、WorkBook.Load("template.xlsx", "password")を使用してください。 数式が更新されない場合は、データを入力した後にsheet.Calculate()を呼び出してください。 大きなデータセットの場合は、workbook.SaveAs()をストリーミングオプションで使用し、メモリ使用量を最適化することを検討してください。 さまざまなシステム環境でxlsx形式のファイルを操作する際に発生する問題についての追加情報とソリューションについては、トラブルシューティングドキュメントを確認してください。

結論

IronXLは、さまざまなソース(データセットオブジェクトやデータベース接続を含む)から効率的に動的データを注入しながら、複雑な書式を保持してC#でのExcelテンプレートの埋め込みを簡略化します。 このアプローチは、開発時間を大幅に削減し、組織の報告ワークフロー全体で文書の一貫性を維持します。 IronXLは、Excelへのデータ書き込み、新しい行の挿入、出力ファイルへのセルフォーマットの適用など、.NETアプリケーションでのExcel自動化に必要なツールを提供します。

Excelレポートの効率化の準備はできましたか? 無料のお試しIronXLトライアルを開始してプロジェクトでのテンプレート埋め込みをテストするか、ワークフローを強化するためにさらに多くのExcel自動化チュートリアルを探してみてください。 本番環境への導入については、ニーズに合ったライセンスオプションをご覧ください。

How to Export Excel Data to Existing Excel File Templates in C# Using IronXL: Image 9 - Licensing.

よくある質問

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ボットを作成したりして、技術に対する愛情と創造性を組み合わせています。