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

BlazorでIronXLを使用してExcelにエクスポートする方法

Excelにデータをエクスポートすることは、レポートの作成、在庫リストの作成、顧客の請求書の作成など、ほぼすべてのWebアプリが必要とするものです。 Blazor Serverアプリケーションでは、Microsoft Officeを必要とせずにこれを確実に達成することが難しい場合があります。 そこでIronXLが役立ちます。 サーバーから直接Excelファイルを作成、フォーマット、ダウンロードでき、Officeのインストールが不要で、Blazorとシームレスに統合されます。 このガイドでは、アプリにプロフェッショナルなExcelエクスポート機能を追加するのがいかに簡単かを見ていきます。さあ、始めましょう。

ExcelへのデータエクスポートのためのIronXLの始め方

Blazor ServerアプリケーションでIronXLを設定するには、最小限の設定が必要です。 まず、Visual Studio 2022以降で新しいBlazor Serverプロジェクトを作成し、.NET 6以上をターゲットにします。

NuGetパッケージマネージャーコンソールを通じてIronXLをインストールします(代替方法については完全なインストールガイドを参照してください):

Install-Package IronXL.Excel

次に、ファイルダウンロード用のJavaScriptヘルパー関数を作成します。 wwwrootフォルダーに、新しいJavaScriptファイルexcelExport.jsを追加します:

window.downloadFileFromStream = async (fileName, contentStreamReference) => {
    const arrayBuffer = await contentStreamReference.arrayBuffer();
    const blob = new Blob([arrayBuffer]);
    const url = URL.createObjectURL(blob);
    const anchorElement = document.createElement('a');
    anchorElement.href = url;
    anchorElement.download = fileName ?? 'export.xlsx';
    anchorElement.click();
    anchorElement.remove();
    URL.revokeObjectURL(url);
}
window.downloadFileFromStream = async (fileName, contentStreamReference) => {
    const arrayBuffer = await contentStreamReference.arrayBuffer();
    const blob = new Blob([arrayBuffer]);
    const url = URL.createObjectURL(blob);
    const anchorElement = document.createElement('a');
    anchorElement.href = url;
    anchorElement.download = fileName ?? 'export.xlsx';
    anchorElement.click();
    anchorElement.remove();
    URL.revokeObjectURL(url);
}
JAVASCRIPT

_Host.cshtmlファイルにこのスクリプトを含めます:

<script src="~/excelExport.js"></script>
<script src="~/excelExport.js"></script>
HTML

このJavaScript関数は、Blazor Serverアプリケーションからのバイトストリームをダウンロード可能なファイルに変換し、ブラウザ側のダウンロードメカニズムを処理します。関数は一時的なblob URLを作成し、ダウンロードをトリガーし、メモリリークを防ぐためにリソースをクリーンアップします。

IronXLでデータソースをExcelファイルにエクスポートする方法は?

ビジネスロジックを処理するためにExcelエクスポートサービスを作成します。 このサービスは、IronXL機能をカプセル化し、BlazorのExcelエクスポート実装におけるさまざまなエクスポートシナリオに再利用可能なメソッドを提供します:

using IronXL;
using System.IO;
using ExportExcel.Models;
public class ExcelExportService
{
    public byte[] GenerateSalesReport(List<SalesData> salesData)
    {
        try
        {
            var workbook = WorkBook.Create(ExcelFileFormat.XLSX);
            workbook.Metadata.Author = "Sales Department";
            var worksheet = workbook.CreateWorkSheet("Monthly Sales");
            worksheet["A1"].Value = "Date";
            worksheet["B1"].Value = "Product";
            worksheet["C1"].Value = "Quantity";
            worksheet["D1"].Value = "Revenue";
            worksheet["E1"].Value = "Profit Margin";
            var headerRange = worksheet["A1:E1"];
            headerRange.Style.Font.Bold = true;
            headerRange.Style.BackgroundColor = "#4472C4";
            headerRange.Style.Font.Color = "#FFFFFF";
            int row = 2;
            foreach (var sale in salesData)
            {
                worksheet[$"A{row}"].Value = sale.Date.ToString("yyyy-MM-dd");
                worksheet[$"B{row}"].Value = sale.Product ?? "Unknown";
                worksheet[$"C{row}"].Value = sale.Quantity;
                worksheet[$"D{row}"].Value = sale.Revenue;
                worksheet[$"E{row}"].Value = $"=D{row}*0.15";
                row++;
            }
            worksheet.AutoSizeColumn(0, true);
            using var ms = workbook.ToStream();
            return ms.ToArray();
        }
        catch (Exception ex)
        {
        // If the program fails to return file
            throw new InvalidOperationException("Failed to generate sales report", ex);
        }
    }
}
using IronXL;
using System.IO;
using ExportExcel.Models;
public class ExcelExportService
{
    public byte[] GenerateSalesReport(List<SalesData> salesData)
    {
        try
        {
            var workbook = WorkBook.Create(ExcelFileFormat.XLSX);
            workbook.Metadata.Author = "Sales Department";
            var worksheet = workbook.CreateWorkSheet("Monthly Sales");
            worksheet["A1"].Value = "Date";
            worksheet["B1"].Value = "Product";
            worksheet["C1"].Value = "Quantity";
            worksheet["D1"].Value = "Revenue";
            worksheet["E1"].Value = "Profit Margin";
            var headerRange = worksheet["A1:E1"];
            headerRange.Style.Font.Bold = true;
            headerRange.Style.BackgroundColor = "#4472C4";
            headerRange.Style.Font.Color = "#FFFFFF";
            int row = 2;
            foreach (var sale in salesData)
            {
                worksheet[$"A{row}"].Value = sale.Date.ToString("yyyy-MM-dd");
                worksheet[$"B{row}"].Value = sale.Product ?? "Unknown";
                worksheet[$"C{row}"].Value = sale.Quantity;
                worksheet[$"D{row}"].Value = sale.Revenue;
                worksheet[$"E{row}"].Value = $"=D{row}*0.15";
                row++;
            }
            worksheet.AutoSizeColumn(0, true);
            using var ms = workbook.ToStream();
            return ms.ToArray();
        }
        catch (Exception ex)
        {
        // If the program fails to return file
            throw new InvalidOperationException("Failed to generate sales report", ex);
        }
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

このサービスは、新しいワークブックとワークシートの作成、フォーマットされたヘッダーの追加、データソースからのインポートデータでデータ行を埋めること、数式の適用、および潜在的なエラーの処理を含む、IronXLの主要機能を示します。 AutoSizeColumnメソッドは、コンテンツの長さに関係なく列が正しく表示されることを保証します。 より高度なフォーマットオプションについては、セルスタイリングガイドをご覧ください。

Blazorでファイルダウンロードを実装する方法は?

エクスポートサービスを使用し、ユーザーとの対話を処理するRazorコンポーネントを作成します:

@page "/excel-export"
@using ExportExcel.Models
@inject ExcelExportService ExcelService
@inject IJSRuntime JS
<h3>Excel Export Dashboard</h3>
<div class="export-section">
    <button class="btn btn-primary" @onclick="ExportSalesReport" disabled="@isExporting">
        @if (isExporting)
        {
            <span>Generating...</span>
        }
        else
        {
            <span>Export Sales Report</span>
        }
    </button>
    @if (!string.IsNullOrEmpty(errorMessage))
    {
        <div class="alert alert-danger mt-2">@errorMessage</div>
    }
</div>
@code {
    private bool isExporting = false;
    private string errorMessage = "";
    private async Task ExportSalesReport()
    {
        try
        {
            isExporting = true;
            errorMessage = "";
            // Generate sample data - replace with actual data source
            var salesData = GetSalesData();
            // Generate Excel file
            var fileBytes = ExcelService.GenerateSalesReport(salesData);
            // Trigger download using a memory stream to handle the file
            using var stream = new MemoryStream(fileBytes);
            using var streamRef = new DotNetStreamReference(stream);
            await JS.InvokeVoidAsync("downloadFileFromStream",
                $"SalesReport_{DateTime.Now:yyyyMMdd}.xlsx", streamRef);
        }
        catch (Exception ex)
        {
            errorMessage = "Export failed. Please try again.";
            // Log exception details for debugging
        }
        finally
        {
            isExporting = false;
        }
    }
    private List<SalesData> GetSalesData()
    {
        // Return your actual data here
        return new List<SalesData>
        {
            new() { Date = DateTime.Now, Product = "Widget A",
                   Quantity = 100, Revenue = 5000 },
            new() { Date = DateTime.Now.AddDays(-1), Product = "Widget B",
                   Quantity = 75, Revenue = 3750 }
        };
    }
}
@page "/excel-export"
@using ExportExcel.Models
@inject ExcelExportService ExcelService
@inject IJSRuntime JS
<h3>Excel Export Dashboard</h3>
<div class="export-section">
    <button class="btn btn-primary" @onclick="ExportSalesReport" disabled="@isExporting">
        @if (isExporting)
        {
            <span>Generating...</span>
        }
        else
        {
            <span>Export Sales Report</span>
        }
    </button>
    @if (!string.IsNullOrEmpty(errorMessage))
    {
        <div class="alert alert-danger mt-2">@errorMessage</div>
    }
</div>
@code {
    private bool isExporting = false;
    private string errorMessage = "";
    private async Task ExportSalesReport()
    {
        try
        {
            isExporting = true;
            errorMessage = "";
            // Generate sample data - replace with actual data source
            var salesData = GetSalesData();
            // Generate Excel file
            var fileBytes = ExcelService.GenerateSalesReport(salesData);
            // Trigger download using a memory stream to handle the file
            using var stream = new MemoryStream(fileBytes);
            using var streamRef = new DotNetStreamReference(stream);
            await JS.InvokeVoidAsync("downloadFileFromStream",
                $"SalesReport_{DateTime.Now:yyyyMMdd}.xlsx", streamRef);
        }
        catch (Exception ex)
        {
            errorMessage = "Export failed. Please try again.";
            // Log exception details for debugging
        }
        finally
        {
            isExporting = false;
        }
    }
    private List<SalesData> GetSalesData()
    {
        // Return your actual data here
        return new List<SalesData>
        {
            new() { Date = DateTime.Now, Product = "Widget A",
                   Quantity = 100, Revenue = 5000 },
            new() { Date = DateTime.Now.AddDays(-1), Product = "Widget B",
                   Quantity = 75, Revenue = 3750 }
        };
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

このコンポーネントは、エクスポート中にユーザーにフィードバックを提供し、エラーを優雅に処理し、タイムスタンプ付きのファイル名を生成します。 DotNetStreamReferenceラッパーは、JavaScriptへのバイナリデータの効率的なストリーミングを可能にします。

出力

コードを実行すると、エクスポート処理を行うためのボタンでページが読み込まれるのがわかります。

IronXLを使用してBlazorでExcelにエクスポートする方法:図1 - サンプルBlazorページ

ボタンをクリックすると、新しいExcelドキュメントにデータが保存され、エクスポートされたファイルがダウンロードされます。

IronXLを使用してBlazorでExcelにエクスポートする方法:図2 - Excelファイルにエクスポートされたデータ

IronXLはExcelエクスポートにどのような高度な機能を追加できますか?

IronXLは、プロフェッショナルな外観のエクスポートのための高度なExcel機能をサポートしています。 在庫管理シナリオでは、条件付き書式設定複数のワークシートを追加することができます:

using IronXL;
using ExportExcel.Models;
using System.IO;
namespace ExportExcel.Services
{
    public class InventoryExportService
    {
        public byte[] GenerateInventoryReport(List<InventoryItem> items)
        {
            var workbook = WorkBook.Create();
            var details = workbook.CreateWorkSheet("Inventory Details");
            // Add headers
            details["A1"].Value = "SKU";
            details["B1"].Value = "Name";
            details["C1"].Value = "Quantity";
            // Apply bold font for headers
            var headerRange = details["A1:C1"];
            headerRange.Style.Font.Bold = true;
            for (int i = 0; i < items.Count; i++)
            {
                var row = i + 2; // start from row 2
                var item = items[i];
                details[$"A{row}"].Value = item.SKU;
                details[$"B{row}"].Value = item.Name;
                details[$"C{row}"].Value = item.Quantity;
                // Highlight low stock items
                if (item.Quantity < item.ReorderLevel)
                {
                    details[$"C{row}"].Style.BackgroundColor = "#FFB6B6";
                }
            }
            using var stream = workbook.ToStream();
            return stream.ToArray();
        }
    }
}
using IronXL;
using ExportExcel.Models;
using System.IO;
namespace ExportExcel.Services
{
    public class InventoryExportService
    {
        public byte[] GenerateInventoryReport(List<InventoryItem> items)
        {
            var workbook = WorkBook.Create();
            var details = workbook.CreateWorkSheet("Inventory Details");
            // Add headers
            details["A1"].Value = "SKU";
            details["B1"].Value = "Name";
            details["C1"].Value = "Quantity";
            // Apply bold font for headers
            var headerRange = details["A1:C1"];
            headerRange.Style.Font.Bold = true;
            for (int i = 0; i < items.Count; i++)
            {
                var row = i + 2; // start from row 2
                var item = items[i];
                details[$"A{row}"].Value = item.SKU;
                details[$"B{row}"].Value = item.Name;
                details[$"C{row}"].Value = item.Quantity;
                // Highlight low stock items
                if (item.Quantity < item.ReorderLevel)
                {
                    details[$"C{row}"].Style.BackgroundColor = "#FFB6B6";
                }
            }
            using var stream = workbook.ToStream();
            return stream.ToArray();
        }
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronXLは複数のワークシートを容易に処理し、ビジネスルールに基づいた条件付きフォーマットを適用し、必要に応じてピボットテーブルやチャートなどの高度なExcel機能をサポートします。 詳細なAPIドキュメントについては、包括的なリファレンスガイドをご覧ください。

IronXLを使用してBlazorでExcelにエクスポートする方法:図3 - 高度な機能の例の出力

結論

IronXLは、Blazor ServerアプリケーションでのExcelファイル生成を、複雑な課題から単純なタスクに変えます。 その直感的なAPIは、Microsoft Officeのインストールの必要性を排除し、高度なExcel機能へのアクセスを提供します。 シンプルなデータエクスポートから数式やフォーマットを含む複雑なマルチシートレポートまで、IronXLは優れたパフォーマンスと信頼性でそれらをすべて処理します。

プロフェッショナルなExcelエクスポート機能でBlazorアプリケーションを強化する準備はできましたか? 本番展開のための無料トライアルを開始しましょう。

よくある質問

Blazor ServerアプリでExcelファイルをエクスポートするにはどうすればよいですか?

IronXLを使用すると、Microsoft Officeを必要とせずにサーバーから直接Excelファイルを作成、フォーマット、ダウンロードすることができます。

BlazorでExcelファイルを操作するのにMicrosoft Officeは必要ですか?

いいえ、IronXLはMicrosoft Officeを必要とせずにExcelファイルを操作することができます。それは、あなたのBlazorアプリケーション内で直接Excelファイルを作成し操作する機能を提供します。

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

IronXLはBlazorとシームレスに統合されており、Excelファイルの作成、フォーマット、エクスポートを容易にします。プロセスを簡略化し、Microsoft Officeの必要性を排除し、さまざまなExcel形式をサポートします。

はい、IronXLはExcelファイルをフォーマットする機能を豊富に提供します。

はい、IronXLはBlazorコンポーネントとシームレスに統合でき、簡単にアプリケーションにExcelエクスポート機能を追加できます。

BlazorでIronXLを使用してExcelファイルをフォーマットすることは可能ですか?

はい、IronXLはExcelファイルのフォーマットに豊富な機能を提供します。

BlazorでのExcelエクスポートで大規模なデータセットをどのように処理しますか?

IronXLは大規模データセットを効率的に処理するように設計されており、Blazor Server環境での広範なデータのエクスポート時にスムーズなパフォーマンスを保証します。

IronXLがサポートするExcelファイル形式は何ですか?

IronXLは、BlazorアプリケーションでのExcelデータのエクスポートおよび操作に柔軟性を持たせるために、XLS、XLSX、およびCSVを含むさまざまなExcelファイル形式をサポートしています。

IronXLはBlazorでのレポート生成に使用できますか?

もちろん、IronXLはBlazorアプリで詳細なレポート生成に最適です。

IronXLはExcelファイルをエクスポートする際にどのようにデータの整合性を保証しますか?

IronXLは、データの構造とフォーマットを正確に保持してデータの整合性を保証し、Blazorアプリケーションにとって信頼できるソリューションとなります。

IronXLを使用してBlazor ServerアプリでExcelファイルの作成を自動化する方法はありますか?

はい、IronXLを使用してBlazor ServerアプリでExcelファイルの作成とエクスポートを自動化することができ、ワークフローを合理化し効率を向上させます。

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

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

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