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

C#でテンプレートをエクスポートする方法

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

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

C#でテンプレートをエクスポートする方法: 図1

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

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

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

C#でテンプレートをエクスポートする方法: 図2

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

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

Install-Package IronXL.Excel

C#でテンプレートをエクスポートする方法: 図3

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

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

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

C#でテンプレートをエクスポートする方法: 図4 - 機能

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数式の操作について詳しく学びましょう。

入力

C#でテンプレートをエクスポートする方法: 図5 - サンプルテンプレート入力

出力

C#でテンプレートをエクスポートする方法: 図6 - 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");
// 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テンプレートと事前に書式設定されたセルから月間売上報告書を生成する完全な例を紹介します。 このコードは、オブジェクト送信者のイベントを処理し、包括的なレポートを書き込む方法を示します。 システムデータベースやインメモリコレクションからのデータを扱う際には、新しいデータテーブルや既存のデータセットを使用してテンプレートを埋めることでデータを効率的に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オブジェクトやデータセットコレクションからExcelにデータを転送する際には、列名を保持し、最初の行をヘッダーとして処理します。

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

入力

C#でテンプレートをエクスポートする方法: 図7 - Excelテンプレート入力

出力

C#でテンプレートをエクスポートする方法: 図8 - 月間レポート出力

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

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

結論

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

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

C#でテンプレートをエクスポートする方法: 図9 - ライセンス

よくある質問

IronXLを使用すると、Microsoft OfficeやExcel Interopを必要とせずに既存のExcelテンプレートにデータをエクスポートでき、フォーマット、数式、レイアウトを効率的に保持します。

IronXLを使用してデータセットオブジェクトからExcelテンプレートへデータをエクスポートできますか?

はい、IronXLはデータセットオブジェクトを含むさまざまなソースからExcelテンプレートへのデータのエクスポートをサポートしており、既存のテンプレート構造を維持します。

Excel操作にIronXLを使用するためにMicrosoft Officeが必要ですか?

いいえ、IronXLはMicrosoft Officeとは独立して動作し、C#でExcelテンプレートを操作するためのクリーンで高性能なソリューションを提供します。

IronXLはExcelテンプレートにデータをエクスポートする際、どのようにフォーマットを処理しますか?

IronXLは既存のフォーマット、数式、レイアウトを維持し、データが望ましい構造にシームレスにエクスポートされることを保証します。

IronXLはどのようなExcel出力を作成できますか?

IronXLは、テンプレートにデータを書き込み、元のフォーマットと構造の完全性を保ちながら、プロフェッショナルなExcelシート出力を作成できます。

IronXLはExcelテンプレートでの動的データ人口をサポートしますか?

はい、IronXLは動的データ人口をサポートしており、さまざまなソースからデータを効率的にExcelテンプレートに埋めることができ、テンプレートの完全性を維持します。

IronXLは数式のある複雑なExcelテンプレートを処理できますか?

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

IronXLは、複雑なExcelテンプレート(数式を含む)を処理する能力があり、データをエクスポートした後も数式が元のまま機能することを保証します。

Microsoft Officeに依存せず、さまざまなデータソースを扱うための高度な機能を備えたIronXLは、Excelにデータをエクスポートするための高性能なソリューションとなっています。

IronXLはMicrosoft Officeから独立して作業する能力と、さまざまなデータソースを処理するための高度な機能を持つため、データをExcelにエクスポートする際の高性能なソリューションとなります。

はい、IronXLを使用すると、Microsoft Officeのような外部依存に頼ることなく、C#を使用してExcelワークシートテンプレートにデータをエクスポートできます。

はい、IronXLはC#を使用してMicrosoft Officeのような外部依存関係に頼らずにExcelワークシートテンプレートにデータをエクスポートすることを許可します。

IronXLは、データを直接Excelテンプレートにエクスポートし、元のフォーマットとレイアウトを保持し、手動での調整の必要性を排除することで、レポート生成を簡略化します。

このウェブページは、C#から既存のExcelテンプレートへのデータエクスポートのためにIronXLを使用するチュートリアルを提供し、プロフェッショナルなExcelレポート生成のための高性能で依存性のないソリューションを提供します。

Curtis Chau
テクニカルライター

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

開発以外にも、CurtisはIoT(Internet of Things)への強い関心を持ち、ハードウェアとソフトウェアの統合方法を模索しています。余暇には、ゲームをしたりDiscordボットを作成したりして、技術に対する愛情と創造性を組み合わせています。