Blazor 에서 Excel로 내보내기: IronXL 사용한 C# 완벽 가이드
엑셀로 데이터를 내보내는 것은 보고서, 재고 목록 또는 고객 인보이스를 생성하기 위해 거의 모든 웹 앱이 필요로 하는 것입니다. Blazor Server 응용 프로그램에서 Microsoft Office가 필요하지 않은 상태에서 이를 신뢰성 있게 완료하는 것은 도전적일 수 있습니다. IronXL이 여기에서 중요한 역할을 합니다. 서버에서 직접 Excel 파일을 생성, 서식화, 다운로드할 수 있으며, Office 설치가 필요하지 않으며 Blazor와 매끄럽게 통합됩니다. 이 가이드에서는 앱에 전문적인 Excel 내보내기 기능을 추가하는 것이 얼마나 간단한지를 보여줍니다. 시작하겠습니다.
IronXL로 데이터를 Excel로 내보내는 방법 안내
Blazor 서버 응용 프로그램에서 IronXL 설치는 최소한의 구성을 요구합니다. Visual Studio 2022 이상에서 .NET 6 이상을 대상으로 하는 새로운 Blazor 서버 프로젝트를 생성하면서 시작하세요.
NuGet 패키지 관리자 콘솔을 통해 IronXL을 설치하세요(대체 방법은 우리의 완전한 설치 가이드를 참조하세요):
Install-Package IronXL
Install-Package IronXL
다음으로 파일 다운로드를 위한 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);
}
이 스크립트를 _Host.cshtml 파일에 포함하세요:
<script src="~/excelExport.js"></script>
<script src="~/excelExport.js"></script>
이 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)
{
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)
{
throw new InvalidOperationException("Failed to generate sales report", ex);
}
}
}
Imports IronXL
Imports System.IO
Imports ExportExcel.Models
Public Class ExcelExportService
Public Function GenerateSalesReport(salesData As List(Of SalesData)) As Byte()
Try
Dim workbook = WorkBook.Create(ExcelFileFormat.XLSX)
workbook.Metadata.Author = "Sales Department"
Dim 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"
Dim headerRange = worksheet("A1:E1")
headerRange.Style.Font.Bold = True
headerRange.Style.BackgroundColor = "#4472C4"
headerRange.Style.Font.Color = "#FFFFFF"
Dim row As Integer = 2
For Each sale In salesData
worksheet($"A{row}").Value = sale.Date.ToString("yyyy-MM-dd")
worksheet($"B{row}").Value = If(sale.Product, "Unknown")
worksheet($"C{row}").Value = sale.Quantity
worksheet($"D{row}").Value = sale.Revenue
worksheet($"E{row}").Value = $"=D{row}*0.15"
row += 1
Next
worksheet.AutoSizeColumn(0, True)
Using ms = workbook.ToStream()
Return ms.ToArray()
End Using
Catch ex As Exception
Throw New InvalidOperationException("Failed to generate sales report", ex)
End Try
End Function
End Class
이 서비스는 새로운 워크북과 워크시트를 생성하고, 서식 있는 헤더를 추가하며, 데이터 소스에서 가져온 데이터를 사용해 데이터를 행에 채우고, 수식을 적용, 잠재적인 오류를 처리하는 등 핵심 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 = "";
var salesData = GetSalesData();
var fileBytes = ExcelService.GenerateSalesReport(salesData);
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.";
}
finally
{
isExporting = false;
}
}
private List<SalesData> GetSalesData()
{
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 }
};
}
}
이 컴포넌트는 내보내기 중 사용자 피드백을 제공하고, 오류를 우아하게 처리하며, 타임스탬프가 포함된 파일 이름을 생성합니다. DotNetStreamReference 래퍼는 JavaScript로 이진 데이터를 효율적으로 스트리밍할 수 있도록 합니다.
산출
코드를 실행하면 내보내기 프로세스를 처리할 버튼이 있는 페이지가 로드됩니다.

버튼을 클릭하면 데이터가 새 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");
details["A1"].Value = "SKU";
details["B1"].Value = "Name";
details["C1"].Value = "Quantity";
var headerRange = details["A1:C1"];
headerRange.Style.Font.Bold = true;
for (int i = 0; i < items.Count; i++)
{
var row = i + 2;
var item = items[i];
details[$"A{row}"].Value = item.SKU;
details[$"B{row}"].Value = item.Name;
details[$"C{row}"].Value = item.Quantity;
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");
details["A1"].Value = "SKU";
details["B1"].Value = "Name";
details["C1"].Value = "Quantity";
var headerRange = details["A1:C1"];
headerRange.Style.Font.Bold = true;
for (int i = 0; i < items.Count; i++)
{
var row = i + 2;
var item = items[i];
details[$"A{row}"].Value = item.SKU;
details[$"B{row}"].Value = item.Name;
details[$"C{row}"].Value = item.Quantity;
if (item.Quantity < item.ReorderLevel)
{
details[$"C{row}"].Style.BackgroundColor = "#FFB6B6";
}
}
using var stream = workbook.ToStream();
return stream.ToArray();
}
}
}
Imports IronXL
Imports ExportExcel.Models
Imports System.IO
Namespace ExportExcel.Services
Public Class InventoryExportService
Public Function GenerateInventoryReport(items As List(Of InventoryItem)) As Byte()
Dim workbook = WorkBook.Create()
Dim details = workbook.CreateWorkSheet("Inventory Details")
details("A1").Value = "SKU"
details("B1").Value = "Name"
details("C1").Value = "Quantity"
Dim headerRange = details("A1:C1")
headerRange.Style.Font.Bold = True
For i As Integer = 0 To items.Count - 1
Dim row = i + 2
Dim item = items(i)
details($"A{row}").Value = item.SKU
details($"B{row}").Value = item.Name
details($"C{row}").Value = item.Quantity
If item.Quantity < item.ReorderLevel Then
details($"C{row}").Style.BackgroundColor = "#FFB6B6"
End If
Next
Using stream = workbook.ToStream()
Return stream.ToArray()
End Using
End Function
End Class
End Namespace
IronXL은 여러 워크시트를 손쉽게 처리하고, 비즈니스 규칙 기반으로 조건부 서식을 적용하며, 필요할 때 피벗 테이블과 차트와 같은 고급 Excel 기능을 지원합니다. 상세한 API 문서를 보려면 당사의 포괄적인 참조 가이드를 방문하세요.

결론
IronXL은 Blazor Server 애플리케이션에서 Excel 파일 생성을 복잡한 문제에서 단순한 작업으로 변환합니다. 이 API는 Microsoft Office 설치의 필요성을 제거하면서 고급 Excel 기능에 대한 액세스를 제공합니다. 단순한 데이터 내보내기부터 복잡한 다중 시트 보고서에 이르기까지 IronXL은 공식 및 서식 포함 모든 것을 훌륭한 성능과 신뢰성으로 처리합니다.
전문적인 Excel 내보내기 기능으로 Blazor 애플리케이션을 강화할 준비가 되셨나요? 오늘 IronXL의 무료 체험판을 시작하거나 라이선스 옵션을 탐험하여 프로덕션 배포를 준비하세요.
자주 묻는 질문
Blazor Server 앱에서 Excel 파일을 내보내는 방법은 무엇인가요?
IronXL 사용하면 Microsoft Office 없이도 서버에서 직접 XLSX 파일을 생성, 서식 지정 및 다운로드하여 Blazor Server 앱에서 Excel 파일을 내보낼 수 있습니다.
Blazor 에서 IronXL 사용하려면 Microsoft Office가 설치되어 있어야 하나요?
아니요, IronXL Blazor 애플리케이션에서 Excel 파일을 생성, 서식 지정 및 내보내기 위해 서버에 Microsoft Office가 설치되어 있을 필요가 없습니다.
IronXL Blazor 애플리케이션과 연동할 수 있나요?
네, IronXL Blazor 애플리케이션과 완벽하게 통합되어 Excel 내보내기 기능을 쉽게 추가할 수 있습니다.
웹 앱에서 엑셀 파일을 내보내는 일반적인 용도는 무엇인가요?
일반적인 용도로는 보고서 생성, 재고 목록 작성, 엑셀 형식의 고객 송장 발행 등이 있습니다.
IronXL 사용하여 Excel 파일을 내보내는 코드 예제가 있습니까?
네, 이 가이드는 IronXL 사용하여 Blazor Server 앱에서 Excel 내보내기 기능을 구현하는 데 도움이 되는 코드 예제를 제공합니다.
IronXL 사용하여 Blazor 에서 Excel 파일의 서식을 지정하는 것이 가능합니까?
네, IronXL 사용하면 스타일 설정, 수식 추가 등 Excel 파일 서식 지정 작업을 Blazor 애플리케이션 내에서 직접 수행할 수 있습니다.
IronXL 로 어떤 유형의 Excel 파일을 만들 수 있나요?
IronXL 사용하면 XLSX 파일을 생성할 수 있습니다. XLSX 파일은 대부분의 스프레드시트 프로그램과 호환되는 널리 사용되는 Excel 파일 형식입니다.



