IRONXL 사용하여 IronXL 사용하여 Blazor 에서 Excel 파일을 내보내는 방법 커티스 차우 업데이트됨:3월 1, 2026 다운로드 IronXL NuGet 다운로드 DLL 다운로드 무료 체험 시작하기 LLM용 사본 LLM용 사본 LLM용 마크다운 형식으로 페이지를 복사하세요 ChatGPT에서 열기 ChatGPT에 이 페이지에 대해 문의하세요 제미니에서 열기 제미니에게 이 페이지에 대해 문의하세요 Grok에서 열기 Grok에게 이 페이지에 대해 문의하세요 혼란 속에서 열기 Perplexity에게 이 페이지에 대해 문의하세요 공유하다 페이스북에 공유하기 트위터에 공유하기 LinkedIn에 공유하기 URL 복사 이메일로 기사 보내기 데이터를 Excel로 내보내는 것은 Blazor 웹 애플리케이션이 거의 필요로 하는 것입니다. 매출 보고서, 재고 목록, 고객 송장을 생성하든 아니든 간에. Microsoft Office가 필요 없이 이 작업을 Blazor 서버 애플리케이션에서 안정적으로 완료하는 것은 벅찰 수 있습니다. IronXL은 이를 간단하게 만듭니다: 서버에서 직접 Excel 파일을 생성, 포맷 및 다운로드할 수 있으며, Office 설치가 필요 없습니다. 이 가이드는 프로젝트 설정 및 서비스 설계부터 고급 서식 및 다중 시트 보고서에 이르기까지 Blazor에서 프로덕션 준비가 완료된 Excel 내보내기 기능을 구축하는 방법을 안내합니다. Blazor 서버 프로젝트에서 IronXL을 어떻게 설정하나요? 내보내기 로직을 작성하기 전에 Blazor 서버 프로젝트에 IronXL을 추가하고 브라우저 측 다운로드 도우미를 구성해야 합니다. Blazor 서버 프로젝트 생성 먼저 .NET 10을 대상으로 설정된 Visual Studio 2022 이상에서 새 Blazor 서버 프로젝트를 생성하세요. 프로젝트가 준비되면 NuGet 패키지 관리자 콘솔을 통해 IronXL을 설치하세요: Install-Package IronXl.Excel IronXL은 .NET 6 이상과 호환되므로 기존 Blazor 프로젝트는 프레임워크를 업그레이드하지 않고도 이를 채택할 수 있습니다. 대체 설치 방법 -- 예를 들어 NuGet UI 또는 CLI -- 에 대해서는 IronXL 설치 가이드를 참조하세요. JavaScript 다운로드 도우미 추가 Blazor 서버는 서버 측에서 실행되므로 파일 다운로드를 트리거하는 데는 작은 JavaScript 브리지가 필요합니다. 파일 excelExport.js를 wwwroot 폴더에 추가하십시오: 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 파일에 포함하십시오 (또는 .NET 8+에서는 App.razor에 포함): <script src="~/excelExport.js"></script> <script src="~/excelExport.js"></script> HTML 이 함수는 Blazor로부터 바이트 스트림을 임시 블롭 URL로 변환하고, 브라우저 다운로드를 트리거한 후 메모리 누수를 방지하기 위해 URL 객체를 정리합니다. 의도적으로 최소화되었습니다 -- 서버에서 C#에서의 많은 작업이 일어납니다. 지금 바로 IronXL으로 시작하세요. 무료로 시작하세요 C#에서 Excel 내보내기 서비스를 어떻게 생성하나요? Excel 생성을 Razor 구성 요소로부터 분리하면 코드를 여러 페이지에 걸쳐 테스트 가능하고 재사용 가능하게 유지할 수 있습니다. 다음 패턴에서는 IronXL을 전용 서비스 클래스 안에 래핑합니다. ExcelExportService 만들기 새 파일 Services/ExcelExportService.cs를 생성하십시오: using IronXL; using System.IO; using ExportExcel.Models; public class ExcelExportService { public byte[] GenerateSalesReport(List<SalesData> salesData) { var workbook = WorkBook.Create(ExcelFileFormat.XLSX); workbook.Metadata.Author = "Sales Department"; var worksheet = workbook.CreateWorkSheet("Monthly Sales"); // Add column headers worksheet["A1"].Value = "Date"; worksheet["B1"].Value = "Product"; worksheet["C1"].Value = "Quantity"; worksheet["D1"].Value = "Revenue"; worksheet["E1"].Value = "Profit Margin"; // Style the header row var headerRange = worksheet["A1:E1"]; headerRange.Style.Font.Bold = true; headerRange.Style.BackgroundColor = "#4472C4"; headerRange.Style.Font.Color = "#FFFFFF"; // Populate data rows 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(); } } using IronXL; using System.IO; using ExportExcel.Models; public class ExcelExportService { public byte[] GenerateSalesReport(List<SalesData> salesData) { var workbook = WorkBook.Create(ExcelFileFormat.XLSX); workbook.Metadata.Author = "Sales Department"; var worksheet = workbook.CreateWorkSheet("Monthly Sales"); // Add column headers worksheet["A1"].Value = "Date"; worksheet["B1"].Value = "Product"; worksheet["C1"].Value = "Quantity"; worksheet["D1"].Value = "Revenue"; worksheet["E1"].Value = "Profit Margin"; // Style the header row var headerRange = worksheet["A1:E1"]; headerRange.Style.Font.Bold = true; headerRange.Style.BackgroundColor = "#4472C4"; headerRange.Style.Font.Color = "#FFFFFF"; // Populate data rows 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(); } } $vbLabelText $csharpLabel 서비스 등록하기 서비스를 Program.cs의 DI 컨테이너에 추가하십시오: var builder = WebApplication.CreateBuilder(args); builder.Services.AddRazorPages(); builder.Services.AddServerSideBlazor(); builder.Services.AddScoped<ExcelExportService>(); var app = builder.Build(); app.MapBlazorHub(); app.MapFallbackToPage("/_Host"); app.Run(); var builder = WebApplication.CreateBuilder(args); builder.Services.AddRazorPages(); builder.Services.AddServerSideBlazor(); builder.Services.AddScoped<ExcelExportService>(); var app = builder.Build(); app.MapBlazorHub(); app.MapFallbackToPage("/_Host"); app.Run(); $vbLabelText $csharpLabel 이 서비스는 여러 가지 주요 IronXL 기능을 보여줍니다. 새로운 워크북과 워크시트 생성을 단일 메서드 호출로 수행하고, 스타일 적용된 헤더를 추가하며, 모든 데이터 소스에서 행을 채우고, =D2*0.15 같은 Excel 수식을 내장할 수 있습니다. AutoSizeColumn 호출은 데이터 길이에 상관없이 열의 내용이 제대로 표시되도록 충분히 넓게 설정합니다. 추가 포맷 옵션에 대해서는 셀 스타일링 가이드를 참조하세요. Blazor 구성 요소에서 Excel 다운로드를 어떻게 트리거하나요? 서비스가 준비되면, 이를 호출하고 결과 바이트를 브라우저에 전달하는 Razor 구성 요소가 필요합니다. Razor 구성 요소 작성 페이지를 Pages/ExcelExportDashboard.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) { 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 } }; } } @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) { 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 } }; } } $vbLabelText $csharpLabel 구성 요소가 하는 일 isExporting 플래그는 생성 중에 버튼을 비활성화하여 중복 요청을 방지합니다. DotNetStreamReference 래퍼는 .NET 메모리 스트림에서 JavaScript 함수로의 효율적 이진 스트리밍 처리를 담당하며, 페이로드 크기를 부풀리는 큰 base64 문자열을 피합니다. SalesReport_20260228.xlsx와 같은 타임스탬프된 파일명은 추가 설정 없이 다운로드를 정리됩니다. 브라우저에서 /excel-export로 이동하면 대시보드 페이지가 내보내기 버튼과 함께 로드됩니다: 버튼을 클릭하면 스프레드시트가 생성되고 브라우저가 자동으로 파일을 다운로드합니다: Excel 내보내기에 어떤 고급 포맷을 적용할 수 있습니까? 기본 데이터 내보내기는 많은 사용 사례에 적합하지만, 생산 환경에서는 조건부 서식, 여러 워크시트 또는 데이터 유효성 검사가 필요한 경우가 많습니다. IronXL은 이러한 모든 기능을 기본적으로 지원합니다. 인벤토리 보고서를 위한 조건부 서식 다음 서비스는 재고 부족 항목을 빨간색으로 강조 표시하여 창고 또는 인벤토리 관리 응용 프로그램의 일반적인 요구 사항을 충족시킵니다: using IronXL; using ExportExcel.Models; using System.IO; public class InventoryExportService { public byte[] GenerateInventoryReport(List<InventoryItem> items) { var workbook = WorkBook.Create(); var details = workbook.CreateWorkSheet("Inventory Details"); // Column headers details["A1"].Value = "SKU"; details["B1"].Value = "Name"; details["C1"].Value = "Quantity"; details["D1"].Value = "Reorder Level"; details["E1"].Value = "Status"; var headerRange = details["A1:E1"]; headerRange.Style.Font.Bold = true; headerRange.Style.BackgroundColor = "#2E75B6"; headerRange.Style.Font.Color = "#FFFFFF"; for (int i = 0; i < items.Count; i++) { int 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; details[$"D{row}"].Value = item.ReorderLevel; details[$"E{row}"].Value = item.Quantity < item.ReorderLevel ? "Reorder Required" : "OK"; if (item.Quantity < item.ReorderLevel) { // Highlight the entire row for low-stock items details[$"A{row}:E{row}"].Style.BackgroundColor = "#FFB6B6"; details[$"C{row}"].Style.Font.Bold = true; } } details.AutoSizeColumn(0, true); details.AutoSizeColumn(1, true); using var stream = workbook.ToStream(); return stream.ToArray(); } } using IronXL; using ExportExcel.Models; using System.IO; public class InventoryExportService { public byte[] GenerateInventoryReport(List<InventoryItem> items) { var workbook = WorkBook.Create(); var details = workbook.CreateWorkSheet("Inventory Details"); // Column headers details["A1"].Value = "SKU"; details["B1"].Value = "Name"; details["C1"].Value = "Quantity"; details["D1"].Value = "Reorder Level"; details["E1"].Value = "Status"; var headerRange = details["A1:E1"]; headerRange.Style.Font.Bold = true; headerRange.Style.BackgroundColor = "#2E75B6"; headerRange.Style.Font.Color = "#FFFFFF"; for (int i = 0; i < items.Count; i++) { int 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; details[$"D{row}"].Value = item.ReorderLevel; details[$"E{row}"].Value = item.Quantity < item.ReorderLevel ? "Reorder Required" : "OK"; if (item.Quantity < item.ReorderLevel) { // Highlight the entire row for low-stock items details[$"A{row}:E{row}"].Style.BackgroundColor = "#FFB6B6"; details[$"C{row}"].Style.Font.Bold = true; } } details.AutoSizeColumn(0, true); details.AutoSizeColumn(1, true); using var stream = workbook.ToStream(); return stream.ToArray(); } } $vbLabelText $csharpLabel IronXL은 생성 시점에서 데이터 값에 따라 셀 수준 포맷을 적용합니다. 조건부 서식 규칙을 선언적으로 적용하거나 같은 워크북 내에서 여러 워크시트를 관리할 수 있습니다. 예를 들어, 하나의 시트는 현재 재고를, 다른 시트는 과거 주문을 위한 것입니다. 단일 내보내기에 여러 워크시트 추가 데이터를 논리적인 시트로 나누면 개별 다운로드 없이 가독성을 향상시킵니다: public byte[] GenerateMultiSheetReport( List<SalesData> sales, List<InventoryItem> inventory) { var workbook = WorkBook.Create(ExcelFileFormat.XLSX); // Sheet 1 -- Sales summary var salesSheet = workbook.CreateWorkSheet("Sales"); salesSheet["A1"].Value = "Date"; salesSheet["B1"].Value = "Revenue"; salesSheet["A1:B1"].Style.Font.Bold = true; for (int i = 0; i < sales.Count; i++) { salesSheet[$"A{i + 2}"].Value = sales[i].Date.ToString("yyyy-MM-dd"); salesSheet[$"B{i + 2}"].Value = sales[i].Revenue; } // Sheet 2 -- Inventory snapshot var invSheet = workbook.CreateWorkSheet("Inventory"); invSheet["A1"].Value = "SKU"; invSheet["B1"].Value = "Name"; invSheet["C1"].Value = "Quantity"; invSheet["A1:C1"].Style.Font.Bold = true; for (int i = 0; i < inventory.Count; i++) { invSheet[$"A{i + 2}"].Value = inventory[i].SKU; invSheet[$"B{i + 2}"].Value = inventory[i].Name; invSheet[$"C{i + 2}"].Value = inventory[i].Quantity; } using var stream = workbook.ToStream(); return stream.ToArray(); } public byte[] GenerateMultiSheetReport( List<SalesData> sales, List<InventoryItem> inventory) { var workbook = WorkBook.Create(ExcelFileFormat.XLSX); // Sheet 1 -- Sales summary var salesSheet = workbook.CreateWorkSheet("Sales"); salesSheet["A1"].Value = "Date"; salesSheet["B1"].Value = "Revenue"; salesSheet["A1:B1"].Style.Font.Bold = true; for (int i = 0; i < sales.Count; i++) { salesSheet[$"A{i + 2}"].Value = sales[i].Date.ToString("yyyy-MM-dd"); salesSheet[$"B{i + 2}"].Value = sales[i].Revenue; } // Sheet 2 -- Inventory snapshot var invSheet = workbook.CreateWorkSheet("Inventory"); invSheet["A1"].Value = "SKU"; invSheet["B1"].Value = "Name"; invSheet["C1"].Value = "Quantity"; invSheet["A1:C1"].Style.Font.Bold = true; for (int i = 0; i < inventory.Count; i++) { invSheet[$"A{i + 2}"].Value = inventory[i].SKU; invSheet[$"B{i + 2}"].Value = inventory[i].Name; invSheet[$"C{i + 2}"].Value = inventory[i].Quantity; } using var stream = workbook.ToStream(); return stream.ToArray(); } $vbLabelText $csharpLabel 워크북 속성, 범위 연산 및 차트 지원을 다루는 전체 API 참조는 IronXL API 문서를 방문하십시오. 오류와 대규모 데이터셋을 효율적으로 처리하는 방법은? Excel 내보내기 작업은 데이터셋이 클 때 조용히 실패하거나 성능이 저하될 수 있습니다. 다음 패턴은 두 가지 문제를 모두 해결합니다. 서비스 계층에서 오류 처리 생성 논리를 컴포넌트가 아닌 서비스에 래핑하면 모든 호출자에 대해 오류 처리를 일관되게 유지할 수 있습니다. 권장 패턴은 IronXL 예외를 전파시키고, 그런 다음 어떤 보고서가 실패했는지에 대한 컨텍스트를 갖춘 도메인 특화 예외로 래핑하는 것입니다. 워크북 생성을 GenerateSalesReport에서 try/catch 블록으로 감싸고, Exception를 잡고 InvalidOperationException("Failed to generate sales report", ex)로 재던지기하십시오. Blazor 구성 요소에서 InvalidOperationException를 잡고 내부 세부 사항을 노출하지 않고 사용자 친화적인 메시지를 표시하십시오. 서비스 생성자에 주입된 ILogger<t>를 사용하여 내부 예외를 기록하여 개발 팀이 특정 워크북 작업으로 실패를 추적할 수 있습니다. 원시 예외 메시지를 최종 사용자에게 노출하지 마십시오. - 파일 경로, 메모리 주소 또는 스택 트레이스가 서버 내부 사항을 드러낼 수 있습니다. Blazor에서의 구조화된 오류 로깅에 대한 공식 Microsoft 문서의 오류 처리 모범 사례를 참조하십시오. .NET에서 테스트 가능한 서비스를 구축하는 데 대한 추가 안내는 Microsoft 종속성 주입 문서가 서비스 등록 및 스콥드 서비스 해결 방법을 설명하며, 이는 여기서 ExcelExportService으로 사용된 패턴입니다. 대용량 데이터셋에 대한 성능 고려사항 수천 개의 행을 초과하는 데이터셋의 경우 다음 접근 방식을 고려하십시오: Excel 내보내기 성능 전략 전략 사용 시점 IronXL 지원 응답으로 직접 스트리밍 Files >10 MB `workbook.ToStream()` 내보내기 전에 데이터 페이지 나누기 필터가 있는 UI 기반 내보내기 워크북 생성 전에 서비스에서 적용 백그라운드 작업 + 다운로드 링크 Reports taking >5 seconds SignalR 또는 폴링과 결합 대형 시트에서 AutoSizeColumn 비활성화 Sheets with >500 rows 대신 고정된 열 너비 설정 IronXL의 ToStream() 메서드는 처음부터 파일을 바이트 배열에 로드하지 않고 직접 출력 스트림으로 작성하므로 대형 워크북에 대한 메모리 사용량이 적습니다. 추가 성능 안내는 IronXL을 사용하여 큰 Excel 파일 읽기 및 쓰기를 참조하십시오. IronXL은 어떤 다른 Excel 기능을 지원합니까? 기본 내보내기를 넘어, IronXL은 실제 보고 요구 사항을 포괄하는 광범위한 Excel 기능을 제공합니다. 수식, 이름 있는 범위, 숫자 서식 Excel 셀에 직접 입력하는 구문을 사용하여 모든 Excel 수식을 임베드할 수 있습니다. IronXL은 읽기 시점에 수식을 평가하므로, 생성된 파일의 사용자는 스프레드시트를 열자마자 계산된 결과를 볼 수 있습니다. 이름 있는 범위는 수식을 더 읽기 쉽고 유지 관리하기 쉽게 만듭니다: // Aggregate formulas on a summary row worksheet["E2"].Value = "=SUM(D2:D100)"; worksheet["F2"].Value = "=AVERAGE(C2:C100)"; worksheet["G2"].Value = "=COUNTIF(B2:B100,\"Widget A\")"; // Named ranges improve formula readability worksheet["D2:D100"].Name = "RevenueColumn"; worksheet["E2"].Value = "=SUM(RevenueColumn)"; // Number and date formatting prevents type misinterpretation worksheet["D2"].Value = 12345.67m; worksheet["D2"].FormatString = "#,##0.00"; worksheet["A2"].Value = DateTime.Now; worksheet["A2"].FormatString = "dd/MM/yyyy"; // Aggregate formulas on a summary row worksheet["E2"].Value = "=SUM(D2:D100)"; worksheet["F2"].Value = "=AVERAGE(C2:C100)"; worksheet["G2"].Value = "=COUNTIF(B2:B100,\"Widget A\")"; // Named ranges improve formula readability worksheet["D2:D100"].Name = "RevenueColumn"; worksheet["E2"].Value = "=SUM(RevenueColumn)"; // Number and date formatting prevents type misinterpretation worksheet["D2"].Value = 12345.67m; worksheet["D2"].FormatString = "#,##0.00"; worksheet["A2"].Value = DateTime.Now; worksheet["A2"].FormatString = "dd/MM/yyyy"; $vbLabelText $csharpLabel 이름 있는 범위 정의 및 숫자 서식을 명시적으로 설정하기 위해 IronXL은 범위 객체의 속성으로 둘 다 제공합니다. 이렇게 하면 데이터베이스에서 문자열로 값을 저장하는 경우 일반적으로 발생하는 금융 데이터 내보내기 시 통화 값을 일반 텍스트로 처리하지 않도록 방지합니다. 지원되는 Excel 파일 형식 IronXL은 .xlsx, .xls, .csv, .tsv을 포함한 여러 Excel 형식을 읽고 쓸 수 있습니다. 형식은 저장 시점에 결정되므로 동일한 서비스 클래스에서 Excel 및 CSV 내보내기를 작은 매개변수 변경으로 지원할 수 있습니다. // Export as CSV for systems that consume flat files workbook.SaveAs("report.csv"); // Or stream as CSV for download using var ms = workbook.ToStream(ExcelFileFormat.CSV); // Export as CSV for systems that consume flat files workbook.SaveAs("report.csv"); // Or stream as CSV for download using var ms = workbook.ToStream(ExcelFileFormat.CSV); $vbLabelText $csharpLabel 이 유연성은 특정 파일 형식을 기대하는 ERP 플랫폼이나 데이터 웨어하우스와 같은 다운스트림 시스템과의 통합에서 중요합니다. IronXL 및 다른 Excel 라이브러리 간의 전체 기능 비교를 보려면 IronXL 기능 페이지를 방문하세요. Microsoft는 예상치 못한 출력 디버깅 시 .xlsx 파일의 내부 구조를 이해해야 할 경우 OOXML 파일 형식을 이해하는 데에 대한 좋은 참고자료를 제공합니다. IronXL의 NuGet 패키지는 NuGet.org에 전체 버전 기록 및 호환성 노트와 함께 나열되어 있습니다. IronXL로 Blazor 프로젝트를 시작하는 방법은? IronXL은 빌드와 테스트를 시간 제한 없이 할 수 있는 무료 개발 라이선스로 제공됩니다. 프로덕션 응용 프로그램의 경우 배포 라이선스가 필요합니다. NuGet에서 직접 무료 체험판을 다운로드할 수 있으며, 시작하는 데 등록은 필요하지 않습니다. 배포할 준비가 되면, 응용 프로그램의 규모에 맞는 플랜을 찾기 위해 IronXL 라이선스 옵션을 검토하세요. IronXL은 모든 주요 .NET 응용 프로그램 종류에서 작동하며, Blazor Server, Blazor WebAssembly(서버 렌더링), ASP.NET Core MVC, 콘솔 응용 프로그램, Windows 데스크톱 응용 프로그램을 포함합니다. 이 라이브러리는 .NET Standard 2.0을 대상으로 하므로, .NET Framework 4.6.2부터 .NET 10까지 지원되는 모든 .NET 버전과 호환됩니다. 프로젝트가 PDF 생성을 필요로 하는 경우, IronPDF는 아무 충돌 없이 IronXL과 함께 통합되므로 동일한 서비스 레이어에서 데이터 내보내기를 Excel 또는 PDF로 할 수 있습니다. 더 많은 Blazor 전용 예제를 탐색하려면, Blazor Excel 내보내기 튜토리얼과 ASP.NET Core 내보내기 가이드를 참조하세요. 기존 스프레드시트를 읽기 위한 C# Excel 리더 튜토리얼은 일반적인 가져오기 시나리오를 다룹니다. 템플릿이 아닌, 프로그램 방법으로 파일을 빌드해야 하는 프로젝트를 위해 새로운 Excel 워크북을 처음부터 만드는 방법을 검토할 수 있습니다. 자주 묻는 질문 Blazor Server 앱에서 데이터를 Excel로 내보내는 방법은 무엇인가요? IronXL 사용하면 Blazor Server 앱에서 데이터를 Excel로 내보낼 수 있습니다. IronXL 사용하면 Microsoft Office 없이도 서버에서 직접 Excel 파일을 생성, 서식 지정 및 다운로드할 수 있습니다. Blazor 에서 IronXL 사용하려면 Microsoft Office가 설치되어 있어야 하나요? 아니요, Microsoft Office를 설치할 필요가 없습니다. IronXL 사용하면 Microsoft Office와 관계없이 Blazor Server 앱에서 Excel 파일을 처리할 수 있습니다. Blazor 애플리케이션에서 IronXL 사용하여 Excel 파일의 서식을 지정할 수 있습니까? 네, IronXL Excel 파일 서식 지정 도구를 제공하여 Blazor Server 앱에서 직접 데이터의 모양을 사용자 지정할 수 있도록 합니다. IronXL Blazor Server 애플리케이션과 호환됩니까? 네, IronXL Blazor Server 애플리케이션과 완벽하게 통합되어 Excel 파일을 쉽게 내보내고 관리할 수 있습니다. Blazor 에서 IronXL 사용하여 Excel로 내보내기를 할 때의 이점은 무엇입니까? IronXL Office 없이도 Excel 파일을 생성하고 조작할 수 있는 간편한 방법을 제공하므로 Blazor 앱에서 데이터를 내보내는 데 효율적인 솔루션입니다. IronXL Blazor Server 앱에서 대용량 Excel 파일을 처리할 수 있습니까? 네, IronXL Blazor Server 애플리케이션 내에서 대용량 Excel 파일을 효율적으로 처리하도록 설계되었습니다. IronXL 사용하여 Blazor 앱에서 어떤 유형의 Excel 파일을 만들 수 있나요? IronXL 사용하면 XLSX, XLS, CSV를 포함한 다양한 유형의 Excel 파일을 Blazor 애플리케이션에서 직접 생성할 수 있습니다. IronXL 사용하여 Blazor Server 앱에서 Excel 파일을 다운로드할 수 있습니까? 네, IronXL Blazor 서버 앱에서 Excel 파일을 직접 다운로드하는 기능을 지원하여 최종 사용자에게 원활한 경험을 제공합니다. IronXL 다른 솔루션과 비교하여 Blazor 에서 Excel 내보내기 기능을 어떻게 개선합니까? IronXL Microsoft Office가 필요 없도록 하고 서버 애플리케이션과 직접 통합하여 Blazor 에서 Excel 파일을 내보내는 프로세스를 간소화합니다. IronXL Blazor 개발자에게 좋은 선택이 되는 이유는 무엇일까요? IronXL 강력한 Excel 처리 기능을 제공하고, Office 설치가 필요 없으며, Blazor 서버 앱에 쉽게 통합되므로 Blazor 개발자에게 좋은 선택입니다. 커티스 차우 지금 바로 엔지니어링 팀과 채팅하세요 기술 문서 작성자 커티스 차우는 칼턴 대학교에서 컴퓨터 과학 학사 학위를 취득했으며, Node.js, TypeScript, JavaScript, React를 전문으로 하는 프론트엔드 개발자입니다. 직관적이고 미적으로 뛰어난 사용자 인터페이스를 만드는 데 열정을 가진 그는 최신 프레임워크를 활용하고, 잘 구성되고 시각적으로 매력적인 매뉴얼을 제작하는 것을 즐깁니다. 커티스는 개발 분야 외에도 사물 인터넷(IoT)에 깊은 관심을 가지고 있으며, 하드웨어와 소프트웨어를 통합하는 혁신적인 방법을 연구합니다. 여가 시간에는 게임을 즐기거나 디스코드 봇을 만들면서 기술에 대한 애정과 창의성을 결합합니다. 관련 기사 업데이트됨 3월 1, 2026 .NET C#에서 Excel 파일 다운로드: XLSX, CSV 등 다양한 형식으로 데이터 내보내기 ASP.NET Core 에서 C# 및 IronXL 사용하여 Excel 파일을 다운로드하는 방법을 설명합니다. MVC 컨트롤러에서 MemoryStream 및 File() 반환 값을 사용하여 데이터를 XLSX, CSV 및 XML 형식으로 내보낼 수 있습니다. 코드 예제가 포함되어 있습니다. 더 읽어보기 업데이트됨 2월 27, 2026 StreamReader 대신 C#에서 Excel 파일을 읽는 방법 StreamReader가 Excel 파일을 읽을 수 없는 이유와 C# .NET 에서 IronXL 사용하여 디스크 또는 메모리 스트림에서 XLSX 및 XLS 통합 문서를 로드하는 방법을 알아보세요. 더 읽어보기 업데이트됨 3월 1, 2026 IronXL 사용하여 C#에서 Excel 파일을 생성하는 방법 IronXL 사용하여 C#으로 Excel 파일을 생성하는 방법을 알아보세요. Office 프로그램에 의존하지 않고 기본적인 스프레드시트 생성, 서식 지정, 수식 작성 및 데이터베이스 통합을 다룹니다. 더 읽어보기 C#을 사용하여 Interop 없이 Excel에서 피벗 테이블을 만드는 방법StreamReader 대신 C#에서 Excel ...
업데이트됨 3월 1, 2026 .NET C#에서 Excel 파일 다운로드: XLSX, CSV 등 다양한 형식으로 데이터 내보내기 ASP.NET Core 에서 C# 및 IronXL 사용하여 Excel 파일을 다운로드하는 방법을 설명합니다. MVC 컨트롤러에서 MemoryStream 및 File() 반환 값을 사용하여 데이터를 XLSX, CSV 및 XML 형식으로 내보낼 수 있습니다. 코드 예제가 포함되어 있습니다. 더 읽어보기
업데이트됨 2월 27, 2026 StreamReader 대신 C#에서 Excel 파일을 읽는 방법 StreamReader가 Excel 파일을 읽을 수 없는 이유와 C# .NET 에서 IronXL 사용하여 디스크 또는 메모리 스트림에서 XLSX 및 XLS 통합 문서를 로드하는 방법을 알아보세요. 더 읽어보기
업데이트됨 3월 1, 2026 IronXL 사용하여 C#에서 Excel 파일을 생성하는 방법 IronXL 사용하여 C#으로 Excel 파일을 생성하는 방법을 알아보세요. Office 프로그램에 의존하지 않고 기본적인 스프레드시트 생성, 서식 지정, 수식 작성 및 데이터베이스 통합을 다룹니다. 더 읽어보기