
How to Export Template in C#
Microsoft Excelテンプレートを使用することで、データを動的に入力しながら、書式、数式、およびレイアウトを保持してレポート生成を効率化します。 このチュートリアルでは、Microsoft Officeの依存関係やExcel Interopを必要とせずにIronXLを使用して既存のExcelワークシートテンプレートにデータを効率的にエクスポートする方法を示します。以下の例では、Excelテンプレートにデータを書き込み、プロフェッショナルなExcelシート出力を作成する方法を説明します。 Microsoft Officeをインストールせずに既存のExcelテンプレートにC#をエクスポートする方法を探しているとします。 その場合、このExcelライブラリは、さまざまなソース(データセットオブジェクトを含む)からデータを挿入できるより高度な機能を備えたクリーンで高性能なソリューションを提供します。
Excelワークブックに加えて、IronXLはXMLファイルなどの他のデータ交換形式ともよく統合し、開発者が構造化データをシステム間でインポート、エクスポート、または変換することを容易にします。 データベースやシステムファイルからExcelにデータを書き込む必要がある場合でも、このライブラリは.NETアプリケーションとのシームレスな統合をサポートします。

データエクスポートにExcelテンプレートを使用する理由
Excelテンプレートは、ゼロからスプレッドシートを作成するよりも大きな利点を提供します。 テンプレートはプロフェッショナルな書式、複雑な数式、条件付き書式ルール、検証済みデータ構造を維持します。 組織はしばしば、インボイス、レポート、ダッシュボードのための標準化されたテンプレートを持っており、これらはデータベース、API、またはデータテーブルのようなコレクションオブジェクトから動的データを取り入れつつ、そのデザインを維持しなければなりません。 条件付き書式とセル書式を出力ファイルに適用する際に、テンプレートはxlsx形式で生成されたすべてのドキュメント間で一貫性を保証します。
既存のテンプレートをプログラム的に埋めることにより、開発者は膨大な書式作業を節約し、生成されたすべてのドキュメント間で一貫性を保証します。 IronXLは、Officeインストールを必要とせずにXLSX、XLSファイル、XLSM、XLTXテンプレートを含むさまざまなExcel形式をサポートすることで、このプロセスをシームレスにします。 これらの操作のためのソースコードは、どのプロジェクトフォルダにも簡単に実装できる単純明快なものです。

テンプレート操作のためのIronXLのセットアップ
まず、NuGetパッケージマネージャーを通じてIronXLをインストールします。 パッケージマネージャーコンソールを開き、次のコマンドを実行します。

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

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");Imports System
' Load the existing Excel template for data import
Dim workbook As WorkBook = WorkBook.Load("ReportTemplate.xlsx")
Dim sheet As WorkSheet = 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.50D
sheet("C7").DecimalValue = 98500.75D
sheet("C8").Formula = "=C6-C7" ' Profit calculation
' Populate a range with array data
Dim monthlyData As Decimal() = {10500D, 12300D, 15600D, 11200D}
For i As Integer = 0 To monthlyData.Length - 1
sheet($"E{10 + i}").DecimalValue = monthlyData(i)
Next
' Save the populated template
workbook.SaveAs("Q4_Sales_Report.xlsx")このコードは既にデザインされたテンプレートを読み込み、既存のすべての書式を保持し、新しいデータを特定のセルに埋め込みます。 DecimalValueプロパティは、数値データが適切な書式を保持することを保証します。 数式セルは隣接するデータが変更されると自動的に再計算され、テンプレートの計算ロジックを保持します。 IronXLでのExcel数式の操作について詳しく学びましょう。
入力

出力

テンプレートプレースホルダーとの作業
多くのテンプレートは、実際のデータで置き換えが必要なプレースホルダーテキストマーカーを使用します。 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");Imports System
' Load template with placeholders
Dim workbook As WorkBook = WorkBook.Load("InvoiceTemplate.xlsx")
Dim sheet As WorkSheet = workbook.DefaultWorkSheet
' Find and replace placeholder text in cells
For Each cell In sheet("A1:H50")
If cell.Text.Contains("{{CustomerName}}") Then
cell.Value = cell.Text.Replace("{{CustomerName}}", "Acme Corporation")
End If
If cell.Text.Contains("{{InvoiceDate}}") Then
cell.Value = cell.Text.Replace("{{InvoiceDate}}", DateTime.Now.ToShortDateString())
End If
If cell.Text.Contains("{{InvoiceNumber}}") Then
cell.Value = cell.Text.Replace("{{InvoiceNumber}}", "INV-2024-001")
End If
Next
' Populate line items dynamically
Dim items = {
New With {.Description = "Software License", .Qty = 5, .Price = 299.99},
New With {.Description = "Support Package", .Qty = 1, .Price = 999.99}
}
Dim startRow As Integer = 15
For Each 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 += 1
Next
workbook.SaveAs("GeneratedInvoice.xlsx")このアプローチは、指定した範囲内のプレースホルダーマーカーを検索し、実際の値で置換します。 テンプレートの書式(フォント、色、境界線を含む)はプロセス全体でそのまま残ります。 より高度なシナリオのために、IronXLのセルスタイリングオプションを探索して、必要に応じて書式を動的に変更しましょう。
実世界での実装例
ここでは、既存のExcelテンプレートと事前に書式設定されたセルから月間売上報告書を生成する完全な例を紹介します。 このコードは、オブジェクト送信者のイベントを処理し、包括的なレポートを書き込む方法を示します。 システムデータベースやインメモリコレクションからのデータを扱う際には、新しいデータテーブルや既存のデータセットを使用してテンプレートを埋めることでデータを効率的に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 Sub GenerateMonthlyReport(templatePath As String, salesData As Dictionary(Of String, Decimal))
' Load the existing template file
Dim workbook As WorkBook = WorkBook.Load(templatePath)
Dim sheet As WorkSheet = 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
Dim currentRow As Integer = 6
Dim totalSales As Decimal = 0
For Each 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 += 1
Next
' Update total row with sum
sheet($"C{currentRow}").DecimalValue = totalSales
sheet($"C{currentRow}").Style.Font.Bold = True
' Save with timestamp
Dim outputPath As String = $"Reports/Monthly_Report_{DateTime.Now:yyyyMMdd}.xlsx"
workbook.SaveAs(outputPath)
End Subこの方法は、売上データを受け入れ、標準化されたテンプレートを埋め込み、パーセンテージと合計を自動的に計算しながら、テンプレートのプロフェッショナルな外観を保持します。 テンプレート内の既存のチャートと条件付き書式は、新しいデータに基づいて自動的に更新されます。 注意: DataTableオブジェクトやデータセットコレクションからExcelにデータを転送する際には、列名を保持し、最初の行をヘッダーとして処理します。
辞書からデータを書き込んだり、データベースクエリから値を挿入したり、さまざまなシステムソースからExcelにデータをエクスポートする必要がある場合、この以下の例のアプローチはシームレスに動作します。 簡単にアクセスできるように、指定したフォルダに出力ファイルを保存してください。 DataTablesの操作についての詳細情報は、DataTableのインポートドキュメントとソースコードの例を参照してください。
入力

出力

一般的な問題のトラブルシューティング
テンプレートを操作する際には、ファイルパスが正しいことやテンプレートが他のプロセスによってロックされていないことを確認してください。 パスワード保護されたテンプレート用には、WorkBook.Load("template.xlsx", "password")を使用してください。 数式が更新されない場合は、データの埋め込み後にsheet.Calculate()を呼び出してください。 For large datasets, consider using workbook.SaveAs() with streaming options to optimize memory usage. さまざまなシステム環境でxlsx形式のファイルを操作する際に発生する問題についての追加情報とソリューションについては、トラブルシューティングドキュメントを確認してください。
結論
IronXLは、さまざまなソース(データセットオブジェクトやデータベース接続を含む)から効率的に動的データを注入しながら、複雑な書式を保持してC#でのExcelテンプレートの埋め込みを簡略化します。 このアプローチは、開発時間を大幅に削減し、組織の報告ワークフロー全体で文書の一貫性を維持します。 Excelにデータを書き込んだり、新しい行を挿入したり、出力ファイルにセルフォーマットを適用する必要があるかどうかにかかわらず、IronXLは.NETアプリケーションでのプロフェッショナルなExcel自動化に必要なツールを提供します。
Excelレポートの効率化の準備はできましたか? 無料のお試しIronXLトライアルを開始してプロジェクトでのテンプレート埋め込みをテストするか、ワークフローを強化するためにさらに多くのExcel自動化チュートリアルを探してみてください。 本番展開については、ニーズに合ったライセンスオプションを参考にしてください。

Curtis Chauは、カールトン大学でコンピュータサイエンスの学士号を取得し、Node.js、TypeScript、JavaScript、およびReactに精通したフロントエンド開発を専門としています。直感的で美しいユーザーインターフェースを作成することに情熱を持ち、Curtisは現代のフレームワークを用いた開発や、構造の良い視覚的に魅力的なマニュアルの作成を楽しんでいます。
関連する記事



