Read Excel Files in ASP.NET MVC Using C# with IronXL

This article was translated from English: Does it need improvement?
Translated
View the article in English

IronXL은 ASP.NET MVC 개발자가 C#에서 바로 Excel 파일을 읽을 수 있도록 하여 Microsoft Office 의존성 없이 Excel 데이터를 System.Data.DataTable로 변환하여 몇 줄의 코드로 웹 뷰에서 쉽게 표시할 수 있습니다.

퀵스타트: MVC에서 엑셀 시트를 데이터 테이블로 로드하고 변환

이 예제는 몇 초 만에 시작하는 방법을 보여줍니다: Excel 워크북을 불러오고, 첫 번째 워크시트를 선택한 다음 IronXL을 사용하여 System.Data.DataTable로 변환합니다 - Interop 없이, 번거로움 없이.

  1. NuGet 패키지 관리자를 사용하여 https://www.nuget.org/packages/IronXl.Excel 설치하기

    PM > Install-Package IronXl.Excel
  2. 다음 코드 조각을 복사하여 실행하세요.

    var dataTable = IronXl.WorkBook.Load("CustomerData.xlsx").DefaultWorkSheet.ToDataTable(true);
  3. 실제 운영 환경에서 테스트할 수 있도록 배포하세요.

    무료 체험판으로 오늘 프로젝트에서 IronXL 사용 시작하기

    arrow pointer

엑셀 읽기를 위한 ASP.NET 프로젝트를 어떻게 만들까요?

왜 Visual Studio 2022가 가장 적합할까요?

Visual Studio 2022를 사용하여 새로운 ASP.NET 프로젝트를 만듭니다. Visual Studio 2022는 .NET 6+ 프레임워크에 대해 뛰어난 지원을 제공하며, IronXL 메서드에 대한 개선된 IntelliSense 및 대형 Excel 파일 작업 시 더 나은 성능을 제공합니다. IDE의 NuGet 통합은 IronXL 설치를 특히 간단하게 만듭니다.

어떤 프로젝트 템플릿을 선택해야 하나요?

ASP.NET에서 Excel 파일을 읽으려면 "ASP.NET Core Web App (Model-View-Controller)" 템플릿을 선택하십시오. 이 템플릿은 데이터 처리(Excel 읽기)와 표현 로직을 분리하는 깔끔한 MVC 구조를 제공합니다. MVC 패턴은 IronXLDataTable 변환과 완벽하게 함께 작동하며, 컨트롤러에서 스프레드시트를 로드하고 뷰에 원활하게 표시할 수 있습니다.

어떤 .NET 버전을 추천하나요?

IronXL는 .NET Framework 4.6.2+ 및 .NET Core 3.1+와 호환됩니다. 새로운 ASP.NET MVC 프로젝트의 경우, 최적의 성능과 보안을 위해 .NET 6.0 이상을 사용하십시오. 이러한 버전은 대용량 Excel 파일을 처리할 때 개선된 메모리 관리와 스프레드시트 파일 형식 변환을 위한 더 나은 async/await 지원을 제공합니다.

IronXL 라이브러리를 설치하는 방법은 무엇입니까?

설치 요구 사항은 무엇입니까?


어떤 설치 방법이 가장 빠른가요?

새 프로젝트를 생성한 후 IronXL 라이브러리를 설치하십시오. 다음 단계에 따라 IronXL를 설치하세요. NuGet 패키지 관리자 콘솔을 열고 다음 명령어를 실행하십시오:

Install-Package IronXl.Excel

설치를 어떻게 확인할 수 있나요?

IronXL가 제대로 설치되었는지 확인하려면 솔루션 탐색기에서 프로젝트의 종속성을 확인하세요. "Dependencies > Packages" 아래에 "IronXL"이 표시되어야 합니다. 또한, 컨트롤러 파일 상단에 using IronXL;를 추가해 보십시오 - IntelliSense가 네임스페이스를 즉시 인식해야 합니다. 설치 문제 해결에 대한 내용은 라이선스 가이드를 방문하십시오.

내 컨트롤러에서 Excel 파일을 어떻게 읽나요?

컨트롤러 액션에 어떤 코드가 들어가나요?

ASP.NET 프로젝트의 기본 컨트롤러(e.g., HomeController.cs)를 열어 Index 메서드를 다음 코드로 대체하세요:

using IronXL;
using System.Data;

public ActionResult Index()
{
    // Load the Excel workbook from a specified path.
    WorkBook workBook = WorkBook.Load(@"C:\Files\Customer Data.xlsx");

    // Access the first worksheet from the workbook.
    WorkSheet workSheet = workBook.WorkSheets.First();

    // Convert the worksheet data to a DataTable object.
    // The 'true' parameter uses the first row as column headers
    var dataTable = workSheet.ToDataTable(true);

    // Send the DataTable to the view for rendering.
    return View(dataTable);
}
using IronXL;
using System.Data;

public ActionResult Index()
{
    // Load the Excel workbook from a specified path.
    WorkBook workBook = WorkBook.Load(@"C:\Files\Customer Data.xlsx");

    // Access the first worksheet from the workbook.
    WorkSheet workSheet = workBook.WorkSheets.First();

    // Convert the worksheet data to a DataTable object.
    // The 'true' parameter uses the first row as column headers
    var dataTable = workSheet.ToDataTable(true);

    // Send the DataTable to the view for rendering.
    return View(dataTable);
}
$vbLabelText   $csharpLabel

다른 형식 대신 DataTable을 사용하는 이유는 무엇인가요?

Index 액션 메서드에서, IronXLLoad 메서드를 사용하여 Excel 파일을 로드합니다. Excel 파일의 경로(파일명 포함)는 메서드 호출의 매개변수로 제공됩니다. 다음으로, 첫 번째 Excel 시트를 작업 시트로 선택하고 그 안에 포함된 데이터를 DataTable 객체에 로드합니다. 마지막으로, DataTable를 프론트엔드로 전송합니다.

DataTable는 Razor 뷰와 원활하게 통합되며 행과 열을 반복하는 데 내장된 지원을 제공하기 때문에 ASP.NET MVC에 이상적입니다. 커스텀 객체와 달리, DataTable는 모델 매핑이 필요하지 않으며 복합 데이터 유형을 자동으로 처리합니다. 필요할 때 DataSetDataTable를 다시 Excel로 내보낼 수도 있습니다.

누락된 파일에 대한 오류 처리는 어떻게 해야 하나요?

견고한 오류 처리는 Excel 파일이 누락되거나 손상되었을 때 애플리케이션이 중단되지 않도록 보장합니다. 다음은 적절한 예외 처리가 있는 향상된 버전입니다:

public ActionResult Index()
{
    try
    {
        string filePath = @"C:\Files\Customer Data.xlsx";

        // Check if file exists before attempting to load
        if (!System.IO.File.Exists(filePath))
        {
            ViewBag.Error = "Excel file not found at specified location.";
            return View(new DataTable());
        }

        // Load workbook with error handling
        WorkBook workBook = WorkBook.Load(filePath);

        // Verify worksheet exists
        if (workBook.WorkSheets.Count == 0)
        {
            ViewBag.Error = "No worksheets found in the Excel file.";
            return View(new DataTable());
        }

        WorkSheet workSheet = workBook.WorkSheets.First();
        var dataTable = workSheet.ToDataTable(true);

        return View(dataTable);
    }
    catch (Exception ex)
    {
        // Log the exception (consider using a logging framework)
        ViewBag.Error = $"Error reading Excel file: {ex.Message}";
        return View(new DataTable());
    }
}
public ActionResult Index()
{
    try
    {
        string filePath = @"C:\Files\Customer Data.xlsx";

        // Check if file exists before attempting to load
        if (!System.IO.File.Exists(filePath))
        {
            ViewBag.Error = "Excel file not found at specified location.";
            return View(new DataTable());
        }

        // Load workbook with error handling
        WorkBook workBook = WorkBook.Load(filePath);

        // Verify worksheet exists
        if (workBook.WorkSheets.Count == 0)
        {
            ViewBag.Error = "No worksheets found in the Excel file.";
            return View(new DataTable());
        }

        WorkSheet workSheet = workBook.WorkSheets.First();
        var dataTable = workSheet.ToDataTable(true);

        return View(dataTable);
    }
    catch (Exception ex)
    {
        // Log the exception (consider using a logging framework)
        ViewBag.Error = $"Error reading Excel file: {ex.Message}";
        return View(new DataTable());
    }
}
$vbLabelText   $csharpLabel

다른 워크시트를 선택하려면 어떻게 하나요?

IronXL는 특정 워크시트를 선택하고 작업하는 여러 방법을 제공합니다. 인덱스, 이름별로 워크시트에 접근하거나 사용 가능한 모든 시트를 반복할 수 있습니다:

// Method 1: Select by worksheet name
WorkSheet namedSheet = workBook.GetWorkSheet("Sales Data");

// Method 2: Select by index (zero-based)
WorkSheet secondSheet = workBook.WorkSheets[1];

// Method 3: Select the default/active worksheet
WorkSheet defaultSheet = workBook.DefaultWorkSheet;

// Method 4: Iterate through all worksheets
foreach (WorkSheet sheet in workBook.WorkSheets)
{
    string sheetName = sheet.Name;
    // Process each worksheet
}
// Method 1: Select by worksheet name
WorkSheet namedSheet = workBook.GetWorkSheet("Sales Data");

// Method 2: Select by index (zero-based)
WorkSheet secondSheet = workBook.WorkSheets[1];

// Method 3: Select the default/active worksheet
WorkSheet defaultSheet = workBook.DefaultWorkSheet;

// Method 4: Iterate through all worksheets
foreach (WorkSheet sheet in workBook.WorkSheets)
{
    string sheetName = sheet.Name;
    // Process each worksheet
}
$vbLabelText   $csharpLabel

웹 페이지에 Excel 데이터를 표시하려면 어떻게 하나요?

어떤 뷰 코드가 필요합니까?

다음 예제는 이전 예제에서 반환된 DataTable를 웹 브라우저에 표시하는 방법을 보여줍니다.

이 예제에서 사용된 작업용 Excel 파일은 다음과 같습니다:

Excel spreadsheet with customer names, shipping costs, and unit prices - sample data for web display tutorial

*Excel 파일*

index.cshtml (인덱스 보기)를 열고 코드를 다음 HTML 코드로 대체하십시오:

@{
    ViewData["Title"] = "Home Page";
}

@using System.Data
@model DataTable

<div class="text-center">
    <h1 class="display-4">Welcome to IronXL Read Excel MVC</h1>
</div>

@* Check for errors first *@
@if (ViewBag.Error != null)
{
    <div class="alert alert-danger">
        @ViewBag.Error
    </div>
}

@* Display table only if data exists *@
@if (Model != null && Model.Rows.Count > 0)
{
    <table class="table table-dark">
        <tbody>
            @foreach (DataRow row in Model.Rows)
            {
                <tr>
                    @for (int i = 0; i < Model.Columns.Count; i++)
                    {
                        <td>@row[i]</td>
                    }
                </tr>
            }
        </tbody>
    </table>
}
else
{
    <p>No data to display.</p>
}
@{
    ViewData["Title"] = "Home Page";
}

@using System.Data
@model DataTable

<div class="text-center">
    <h1 class="display-4">Welcome to IronXL Read Excel MVC</h1>
</div>

@* Check for errors first *@
@if (ViewBag.Error != null)
{
    <div class="alert alert-danger">
        @ViewBag.Error
    </div>
}

@* Display table only if data exists *@
@if (Model != null && Model.Rows.Count > 0)
{
    <table class="table table-dark">
        <tbody>
            @foreach (DataRow row in Model.Rows)
            {
                <tr>
                    @for (int i = 0; i < Model.Columns.Count; i++)
                    {
                        <td>@row[i]</td>
                    }
                </tr>
            }
        </tbody>
    </table>
}
else
{
    <p>No data to display.</p>
}
$vbLabelText   $csharpLabel

테이블 스타일링에 Bootstrap을 사용하는 이유는 무엇인가요?

위의 코드는 Index 메서드에서 반환된 DataTable를 모델로 사용합니다. 테이블의 각 행은 데코레이션용 Bootstrap 서식 포함하여 @for 루프를 사용하여 웹페이지에 출력됩니다.

Bootstrap은 다양한 화면 크기에 자동으로 맞춰지는 반응형 테이블 디자인을 제공하며, 이는 현대적인 웹 애플리케이션에 필수적입니다. table-dark 클래스는 읽기 쉬운 매력적인 어두운 테마 테이블을 생성합니다. 셀 테두리 및 정렬 또는 배경 패턴 및 색상과 같은 보다 고급 엑셀 서식을 위해 IronXL는 구조화된 데이터에 직접 접근할 수 있는 추가 메서드를 제공합니다.

최종 출력은 어떻게 보이나요?

프로젝트를 실행하면 아래에 표시된 결과가 생성됩니다:

Bootstrap table displaying Excel customer data with names, shipping costs, and unit prices in ASP.NET MVC application

*Bootstrap 테이블*

테이블에 헤더를 추가하려면 어떻게 하나요?

엑셀 파일에서 열 헤더를 표시하려면 보기 코드를 수정하여 테이블 헤더 섹션을 포함하십시오. ToDataTable(true)를 호출할 때, IronXL는 자동으로 첫 번째 행을 열 이름으로 사용합니다:

@if (Model != null && Model.Rows.Count > 0)
{
    <table class="table table-dark">
        <thead>
            <tr>
                @foreach (DataColumn column in Model.Columns)
                {
                    <th>@column.ColumnName</th>
                }
            </tr>
        </thead>
        <tbody>
            @foreach (DataRow row in Model.Rows)
            {
                <tr>
                    @for (int i = 0; i < Model.Columns.Count; i++)
                    {
                        <td>@row[i]</td>
                    }
                </tr>
            }
        </tbody>
    </table>
}
@if (Model != null && Model.Rows.Count > 0)
{
    <table class="table table-dark">
        <thead>
            <tr>
                @foreach (DataColumn column in Model.Columns)
                {
                    <th>@column.ColumnName</th>
                }
            </tr>
        </thead>
        <tbody>
            @foreach (DataRow row in Model.Rows)
            {
                <tr>
                    @for (int i = 0; i < Model.Columns.Count; i++)
                    {
                        <td>@row[i]</td>
                    }
                </tr>
            }
        </tbody>
    </table>
}
$vbLabelText   $csharpLabel

이 향상된 기능은 Excel 파일에서 '고객 이름', '배송 비용', '단가'와 같은 적절한 열 헤더를 표시합니다. 명명된 범위 또는 명명된 테이블을 포함한 더 복잡한 시나리오의 경우, IronXL는 구조화된 데이터에 직접 접근할 수 있는 추가 메서드를 제공합니다.

자주 묻는 질문

Microsoft Office 없이 ASP.NET MVC에서 Excel 파일을 읽는 방법은 무엇인가요?

IronXL을 사용하면 Microsoft Office에 대한 의존성 없이 C#에서 Excel 파일을 직접 읽을 수 있습니다. NuGet을 통해 IronXL을 설치한 다음 WorkBook.Load()를 사용하여 Excel 파일을 열고 단 한 줄의 코드로 DataTable로 변환할 수 있습니다. 예: var dataTable = IronXl.WorkBook.Load('CustomerData.xlsx').DefaultWorkSheet.ToDataTable(true);

Excel 데이터를 ASP.NET의 DataTable로 변환하는 가장 빠른 방법은 무엇입니까?

IronXL은 Excel 워크시트를 System.Data.DataTable 개체로 즉시 변환하는 ToDataTable() 메서드를 제공합니다. IronXL로 통합 문서를 로드한 후, 아무 워크시트에 접근하여 ToDataTable(true)를 호출하면 헤더를 포함할 수 있습니다. 이 변환은 단 한 줄의 코드로 가능하며 ASP.NET MVC 뷰와 완벽하게 연동됩니다.

웹 애플리케이션에서 엑셀 파일을 처리하려면 어떤 .NET 버전을 사용해야 할까요?

IronXL은 .NET Framework 4.6.2 이상 및 .NET Core 3.1 이상을 지원합니다. 새로운 ASP.NET MVC 프로젝트의 경우, IronXL을 사용하여 대용량 Excel 파일을 처리할 때 메모리 관리가 향상되고 스프레드시트 작업에 대한 async/await 지원이 개선되었으므로 .NET 6.0 이상을 사용하는 것이 좋습니다.

Excel 읽기 기능을 구현하는 데 가장 적합한 Visual Studio 프로젝트 템플릿은 무엇입니까?

프로젝트를 생성할 때 'ASP.NET Core 웹 앱(모델-뷰-컨트롤러)' 템플릿을 선택하세요. 이 MVC 구조는 IronXL의 DataTable 변환 기능과 완벽하게 호환되어 컨트롤러에서 Excel 파일을 로드하고 처리하는 동시에 뷰에서 데이터를 깔끔하게 표시할 수 있습니다.

ASP.NET 프로젝트에 Excel 읽기 라이브러리를 어떻게 설치하나요?

NuGet 패키지 관리자 콘솔에서 'Install-Package IronXl.Excel' 명령을 실행하여 IronXL을 설치하세요. 설치 후 프로젝트 종속성을 확인하고 컨트롤러에 'using IronXL;'을 추가하여 IronXL이 제대로 추가되었는지 확인하세요. IntelliSense에서 네임스페이스를 즉시 인식해야 합니다.

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

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

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

A PHP Error was encountered

Severity: Notice

Message: Undefined index: IronXl.Excel

Filename: helpers/counter_helper.php

Line Number: 85

Backtrace:

File: /var/www/ironpdf.com/application/helpers/counter_helper.php
Line: 85
Function: _error_handler

File: /var/www/ironpdf.com/application/views/main/sections/ready_to_started_202509.php
Line: 12
Function: getTotalDonwloadNumber

File: /var/www/ironpdf.com/application/libraries/Render.php
Line: 489
Function: view

File: /var/www/ironpdf.com/application/controllers/Products/Howto.php
Line: 31
Function: render_products_view

File: /var/www/ironpdf.com/index.php
Line: 292
Function: require_once

A PHP Error was encountered

Severity: Notice

Message: Undefined index: IronXl.Excel

Filename: helpers/counter_helper.php

Line Number: 85

Backtrace:

File: /var/www/ironpdf.com/application/helpers/counter_helper.php
Line: 85
Function: _error_handler

File: /var/www/ironpdf.com/application/views/main/sections/ready_to_started_202509.php
Line: 19
Function: getTotalDonwloadNumber

File: /var/www/ironpdf.com/application/libraries/Render.php
Line: 489
Function: view

File: /var/www/ironpdf.com/application/controllers/Products/Howto.php
Line: 31
Function: render_products_view

File: /var/www/ironpdf.com/index.php
Line: 292
Function: require_once

시작할 준비 되셨나요?
Nuget 다운로드 1,890,100 | 버전: 2026.3 방금 출시되었습니다

A PHP Error was encountered

Severity: Notice

Message: Undefined index: IronXl.Excel

Filename: helpers/counter_helper.php

Line Number: 85

Backtrace:

File: /var/www/ironpdf.com/application/helpers/counter_helper.php
Line: 85
Function: _error_handler

File: /var/www/ironpdf.com/application/views/main/sections/still_scrolling_202512.php
Line: 17
Function: getTotalDonwloadNumber

File: /var/www/ironpdf.com/application/views/products/sections/three_column_docs_page_structure.php
Line: 71
Function: view

File: /var/www/ironpdf.com/application/libraries/Render.php
Line: 88
Function: view

File: /var/www/ironpdf.com/application/views/products/how-to/index.php
Line: 2
Function: view

File: /var/www/ironpdf.com/application/libraries/Render.php
Line: 88
Function: view

File: /var/www/ironpdf.com/application/libraries/Render.php
Line: 552
Function: view

File: /var/www/ironpdf.com/application/controllers/Products/Howto.php
Line: 31
Function: render_products_view

File: /var/www/ironpdf.com/index.php
Line: 292
Function: require_once

A PHP Error was encountered

Severity: Notice

Message: Undefined index: IronXl.Excel

Filename: helpers/counter_helper.php

Line Number: 85

Backtrace:

File: /var/www/ironpdf.com/application/helpers/counter_helper.php
Line: 85
Function: _error_handler

File: /var/www/ironpdf.com/application/views/main/sections/still_scrolling_202512.php
Line: 24
Function: getTotalDonwloadNumber

File: /var/www/ironpdf.com/application/views/products/sections/three_column_docs_page_structure.php
Line: 71
Function: view

File: /var/www/ironpdf.com/application/libraries/Render.php
Line: 88
Function: view

File: /var/www/ironpdf.com/application/views/products/how-to/index.php
Line: 2
Function: view

File: /var/www/ironpdf.com/application/libraries/Render.php
Line: 88
Function: view

File: /var/www/ironpdf.com/application/libraries/Render.php
Line: 552
Function: view

File: /var/www/ironpdf.com/application/controllers/Products/Howto.php
Line: 31
Function: render_products_view

File: /var/www/ironpdf.com/index.php
Line: 292
Function: require_once

Still Scrolling Icon

아직도 스크롤하고 계신가요?

빠른 증거를 원하시나요? PM > Install-Package IronXl.Excel
샘플을 실행하세요 데이터가 스프레드시트로 변환되는 것을 지켜보세요.