푸터 콘텐츠로 바로가기
IRONXL 사용하여

IronXL 사용하여 Blazor 에서 Excel로 내보내는 방법

엑셀로 데이터를 내보내는 것은 보고서, 재고 목록 또는 고객 인보이스를 생성하기 위해 거의 모든 웹 앱이 필요로 하는 것입니다. Blazor Server 응용 프로그램에서 Microsoft Office가 필요하지 않은 상태에서 이를 신뢰성 있게 완료하는 것은 도전적일 수 있습니다. 그래서 IronXL이 필요한 것입니다. 서버에서 직접 Excel 파일을 생성, 서식화, 다운로드할 수 있으며, Office 설치가 필요하지 않으며 Blazor와 매끄럽게 통합됩니다. 이 가이드에서는 앱에 전문적인 Excel 내보내기 기능을 추가하는 것이 얼마나 간단한지를 보여줍니다. 시작하겠습니다.

IronXL로 데이터를 Excel로 내보내는 방법 안내

Blazor 서버 응용 프로그램에서 IronXL 설치는 최소한의 구성을 요구합니다. Visual Studio 2022 이상에서 .NET 6 이상을 대상으로 하는 새로운 Blazor 서버 프로젝트를 생성하면서 시작하세요.

NuGet 패키지 관리자 콘솔을 통해 IronXL을 설치하세요(대체 방법은 우리의 완전한 설치 가이드를 참조하세요):

Install-Package IronXl.Excel

다음으로 파일 다운로드를 위한 JavaScript 도우미 함수를 생성합니다. wwwroot 폴더에 excelExport.js라는 새 JavaScript 파일을 추가하십시오:

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 서버 응용 프로그램에서의 바이트 스트림을 다운로드할 수 있는 파일로 변환합니다. 이 함수는 임시 블롭 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);
        }
    }
}
$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 }
        };
    }
}
$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();
        }
    }
}
$vbLabelText   $csharpLabel

IronXL은 여러 워크시트를 손쉽게 처리하고, 비즈니스 규칙 기반으로 조건부 서식을 적용하며, 필요할 때 피벗 테이블과 차트와 같은 고급 Excel 기능을 지원합니다. 상세한 API 문서를 보려면 당사의 포괄적인 참조 가이드를 방문하세요.

IronXL을 사용하여 Blazor에서 Excel로 내보내기: 그림 3 - 고급 기능 예제 출력

결론

IronXL은 Blazor Server 애플리케이션에서 Excel 파일 생성을 복잡한 문제에서 단순한 작업으로 변환합니다. 이 API는 Microsoft Office 설치의 필요성을 제거하면서 고급 Excel 기능에 대한 액세스를 제공합니다. 단순한 데이터 내보내기부터 복잡한 다중 시트 보고서에 이르기까지 IronXL은 공식 및 서식 포함 모든 것을 훌륭한 성능과 신뢰성으로 처리합니다.

전문적인 Excel 내보내기 기능으로 Blazor 애플리케이션을 강화할 준비가 되셨나요? 생산 배포를 위한 무료 체험판을 시작하십시오.

자주 묻는 질문

Blazor Server 앱에서 Excel 파일을 내보내는 방법은 무엇인가요?

IronXL 사용하면 Blazor Server 앱에서 Excel 파일을 내보낼 수 있습니다. IronXL 사용하면 Microsoft Office 없이도 서버에서 직접 Excel 파일을 생성, 서식 지정 및 다운로드할 수 있습니다.

Blazor 에서 Excel 파일을 사용하려면 Microsoft Office가 필요한가요?

아니요, IronXL 사용하면 Microsoft Office 없이도 Excel 파일을 작업할 수 있습니다. Blazor 애플리케이션 내에서 직접 Excel 파일을 생성하고 조작할 수 있는 기능을 제공합니다.

Blazor 에서 IronXL 사용하여 Excel로 내보내기를 할 때의 이점은 무엇입니까?

IronXL Blazor 와 완벽하게 통합되어 Excel 파일을 쉽게 생성, 서식 지정 및 내보낼 수 있도록 지원합니다. 이 솔루션은 프로세스를 간소화하고 Microsoft Office를 사용할 필요성을 없애주며 다양한 Excel 형식을 지원합니다.

IronXL 다른 Blazor 컴포넌트와 통합될 수 있나요?

네, IronXL Blazor 컴포넌트와 완벽하게 통합되어 애플리케이션에 Excel 내보내기 기능을 손쉽게 추가할 수 있습니다.

Blazor 에서 IronXL 사용하여 Excel 파일의 서식을 지정하는 것이 가능합니까?

네, IronXL Blazor Server 애플리케이션 내에서 셀 스타일 지정, 열 너비 조정, 복잡한 수식 설정 등 Excel 파일 서식 지정을 위한 포괄적인 기능을 제공합니다.

Blazor 에서 대용량 데이터셋을 Excel로 내보낼 때 어떻게 처리하시나요?

IronXL 은 대규모 데이터 세트를 효율적으로 처리하도록 설계되어 Blazor Server 환경에서 방대한 데이터를 Excel 파일로 내보낼 때 원활한 성능을 보장합니다.

IronXL 에서 지원하는 Excel 파일 형식은 무엇입니까?

IronXL XLS, XLSX, CSV를 비롯한 다양한 Excel 파일 형식을 지원하므로 Blazor 애플리케이션에서 Excel 데이터를 내보내고 작업하는 방식에 유연성을 제공합니다.

IronXL 사용하여 Blazor 에서 보고서를 생성할 수 있습니까?

네, IronXL Blazor 애플리케이션에서 상세 보고서를 생성하는 데 이상적입니다. 데이터를 수집, 서식 지정 및 전문적인 Excel 보고서로 내보내는 강력한 기능을 제공합니다.

IronXL 엑셀 파일을 내보낼 때 데이터 무결성을 어떻게 보장합니까?

IronXL 내보내기 과정에서 데이터의 구조와 형식을 정확하게 유지하여 데이터 무결성을 보장하므로 Blazor 애플리케이션에 안정적인 솔루션입니다.

IronXL 사용하여 Blazor Server 앱에서 Excel 파일 생성을 자동화하는 방법이 있을까요?

네, IronXL 사용하면 Blazor Server 앱에서 Excel 파일 생성 및 내보내기를 자동화하여 워크플로를 간소화하고 효율성을 향상시킬 수 있습니다.

커티스 차우
기술 문서 작성자

커티스 차우는 칼턴 대학교에서 컴퓨터 과학 학사 학위를 취득했으며, Node.js, TypeScript, JavaScript, React를 전문으로 하는 프론트엔드 개발자입니다. 직관적이고 미적으로 뛰어난 사용자 인터페이스를 만드는 데 열정을 가진 그는 최신 프레임워크를 활용하고, 잘 구성되고 시각적으로 매력적인 매뉴얼을 제작하는 것을 즐깁니다.

커티스는 개발 분야 외에도 사물 인터넷(IoT)에 깊은 관심을 가지고 있으며, 하드웨어와 소프트웨어를 통합하는 혁신적인 방법을 연구합니다. 여가 시간에는 게임을 즐기거나 디스코드 봇을 만들면서 기술에 대한 애정과 창의성을 결합합니다.

Iron Support Team

We're online 24 hours, 5 days a week.
Chat
Email
Call Me