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 umożliwia programistom ASP.NET MVC czytanie plików Excel bezpośrednio w C# bez zależności od Microsoft Office, konwertując dane Excel na System.Data.DataTable do łatwego wyświetlania w widokach webowych przy użyciu kilku linii kodu.

Szybki start: Załaduj i przekonwertuj arkusz Excel na DataTable w MVC

Ten przykład pokazuje, jak zacząć w kilka sekund: załaduj skoroszyt Excel, wybierz jego pierwszy arkusz i przekonwertuj go na System.Data.DataTable używając IronXL — bez Interop, bez problemów.

  1. Install IronXL with NuGet Package Manager

    PM > Install-Package IronXl.Excel
  2. Skopiuj i uruchom ten fragment kodu.

    var dataTable = IronXl.WorkBook.Load("CustomerData.xlsx").DefaultWorkSheet.ToDataTable(true);
  3. Wdrożenie do testowania w środowisku produkcyjnym

    Rozpocznij używanie IronXL w swoim projekcie już dziś z darmową wersją próbną

    arrow pointer

Jak utworzyć projekt ASP.NET do odczytu Excela?

Dlaczego Visual Studio 2022 działa najlepiej?

Korzystając z Visual Studio 2022, utwórz nowy projekt ASP.NET. Visual Studio 2022 zapewnia doskonałe wsparcie dla frameworków .NET 6+, ulepszoną inteligentną pomoc dla metod IronXL oraz lepszą wydajność przy pracy z dużymi plikami Excel. Integracja NuGet w IDE czyni instalację IronXL szczególnie prostą.

Jaki szablon projektu wybrać?

Do odczytu plików Excel w ASP.NET, wybierz szablon "ASP.NET Core Web App (Model-View-Controller)". Ten szablon zapewnia czystą strukturę MVC, która oddziela przetwarzanie danych (odczyt Excela) od logiki prezentacji. Wzorzec MVC doskonale współpracuje z konwersją IronXL na DataTable, pozwalając na ładowanie arkuszy w kontrolerach i wyświetlanie ich w widokach bezproblemowo.

Która wersja .NET jest zalecana?

IronXL współpracuje z .NET Framework 4.6.2+ i .NET Core 3.1+. Dla nowych projektów ASP.NET MVC używaj .NET 6.0 lub wyższej dla optymalnej wydajności i bezpieczeństwa. Te wersje oferują lepsze zarządzanie pamięcią przy przetwarzaniu dużych plików Excel oraz lepsze wsparcie async/await dla konwersji typów plików arkuszy kalkulacyjnych.

Jak zainstalować bibliotekę IronXL?

Jakie są wymagania instalacyjne?


Jaka metoda instalacji jest najszybsza?

Po utworzeniu nowego projektu, zainstaluj bibliotekę IronXL. Postępuj zgodnie z tymi krokami, aby zainstalować IronXL. Otwórz konsolę menedżera pakietów NuGet i uruchom następujące polecenie:

Install-Package IronXl.Excel

Jak mogę zweryfikować instalację?

Aby zweryfikować poprawne zainstalowanie IronXL, sprawdź zależności projektu w Eksploratorze Rozwiązań. Powinieneś zobaczyć "IronXL" wymienione w "Dependencies > Packages". Dodatkowo, spróbuj dodać using IronXL; na początku pliku kontrolera - IntelliSense powinno natychmiast rozpoznać przestrzeń nazw. Aby rozwiązać problemy z instalacją, odwiedź przewodnik licencyjny.

Jak odczytać plik Excel w moim kontrolerze?

Jaki kod umieścić w akcji kontrolera?

Otwórz domyślny kontroler w swoim projekcie ASP.NET (np. HomeController.cs) i zastąp metodę Index następującym kodem:

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);
}
Imports IronXL
Imports System.Data

Public Function Index() As ActionResult
    ' Load the Excel workbook from a specified path.
    Dim workBook As WorkBook = WorkBook.Load("C:\Files\Customer Data.xlsx")

    ' Access the first worksheet from the workbook.
    Dim workSheet As WorkSheet = workBook.WorkSheets.First()

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

    ' Send the DataTable to the view for rendering.
    Return View(dataTable)
End Function
$vbLabelText   $csharpLabel

Dlaczego używać DataTable zamiast innych formatów?

W metodzie akcji Index, załaduj plik Excel używając metody IronXL z Load. Ścieżka pliku Excel (w tym nazwa pliku) jest podawana jako parametr wywołania metody. Następnie wybierz pierwszy arkusz Excel jako arkusz roboczy i załaduj zawarte w nim dane do obiektu DataTable. Na końcu wyślij DataTable na frontend.

DataTable jest idealne dla ASP.NET MVC, ponieważ bezproblemowo integruje się z widokami Razor i zapewnia wbudowane wsparcie dla iteracji przez wiersze i kolumny. W przeciwieństwie do obiektów niestandardowych, DataTable nie wymaga mapowania modeli i automatycznie obsługuje mieszane typy danych. Możesz również eksportować DataSet i DataTable z powrotem do Excela, gdy jest to potrzebne.

A co z obsługą błędów dla brakujących plików?

Solidna obsługa błędów zapewnia, że aplikacja nie zawiesi się, gdy pliki Excel są brakujące lub uszkodzone. Oto ulepszona wersja z odpowiednią obsługą wyjątków:

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());
    }
}
Imports System.IO
Imports System.Data

Public Function Index() As ActionResult
    Try
        Dim filePath As String = "C:\Files\Customer Data.xlsx"

        ' Check if file exists before attempting to load
        If Not File.Exists(filePath) Then
            ViewBag.Error = "Excel file not found at specified location."
            Return View(New DataTable())
        End If

        ' Load workbook with error handling
        Dim workBook As WorkBook = WorkBook.Load(filePath)

        ' Verify worksheet exists
        If workBook.WorkSheets.Count = 0 Then
            ViewBag.Error = "No worksheets found in the Excel file."
            Return View(New DataTable())
        End If

        Dim workSheet As WorkSheet = workBook.WorkSheets.First()
        Dim dataTable = workSheet.ToDataTable(True)

        Return View(dataTable)
    Catch ex As Exception
        ' Log the exception (consider using a logging framework)
        ViewBag.Error = $"Error reading Excel file: {ex.Message}"
        Return View(New DataTable())
    End Try
End Function
$vbLabelText   $csharpLabel

Jak mogę wybrać różne arkusze?

IronXL zapewnia wiele sposobów na wybór i pracę z konkretnymi arkuszami. Możesz uzyskać dostęp do arkuszy poprzez indeks, nazwę lub iterować przez wszystkie dostępne arkusze:

// 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
}
' Method 1: Select by worksheet name
Dim namedSheet As WorkSheet = workBook.GetWorkSheet("Sales Data")

' Method 2: Select by index (zero-based)
Dim secondSheet As WorkSheet = workBook.WorkSheets(1)

' Method 3: Select the default/active worksheet
Dim defaultSheet As WorkSheet = workBook.DefaultWorkSheet

' Method 4: Iterate through all worksheets
For Each sheet As WorkSheet In workBook.WorkSheets
    Dim sheetName As String = sheet.Name
    ' Process each worksheet
Next
$vbLabelText   $csharpLabel

Jak wyświetlić dane Excel na stronie internetowej?

Jaki kod widoku jest potrzebny?

Kolejny przykład pokazuje, jak wyświetlić DataTable zwrócone w poprzednim przykładzie w przeglądarce internetowej.

Plik Excel używany w tym przykładzie jest pokazany poniżej:

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

Plik Excel

Otwórz index.cshtml (widok indeksu) i zastąp kod następującym kodem 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

Dlaczego używać Bootstrap do stylizacji tabel?

Powyższy kod używa DataTable zwróconego z metody Index jako modelu. Każdy wiersz z tabeli jest drukowany na stronie internetowej przy użyciu pętli @for, obejmując formatowanie Bootstrap dla dekoracji.

Bootstrap zapewnia responsywne projekty tabel, które automatycznie dostosowują się do różnych rozmiarów ekranu — kluczowe dla nowoczesnych aplikacji webowych. Klasa table-dark tworzy atrakcyjną, ciemnotematową tabelę, która jest łatwa do odczytania. Dla bardziej zaawansowanego formatowania Excela, jak obramowania komórek i wyrównanie lub wzory tła i kolory, IronXL dostarcza dodatkowe metody dostępu do danych strukturalnych bezpośrednio.

Jak wygląda efekt końcowy?

Uruchomienie projektu generuje wyniki pokazane poniżej:

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

Tabela Bootstrap

Jak mogę dodać nagłówki do tabeli?

Aby wyświetlić nagłówki kolumn z pliku Excel, zmodyfikuj kod widoku, aby zawierał sekcję nagłówków tabeli. Podczas wywoływania ToDataTable(true), IronXL automatycznie używa pierwszego wiersza jako nazw kolumn:

@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

To ulepszenie wyświetla prawidłowe nagłówki kolumn takie jak "Nazwa Klienta", "Koszt Wysyłki" i "Cena Jednostkowa" z twojego pliku Excel. Dla bardziej skomplikowanych scenariuszy obejmujących nazwane zakresy lub nazwane tabele, IronXL dostarcza dodatkowe metody dostępu do danych strukturalnych bezpośrednio.

Często Zadawane Pytania

Jak odczytać pliki Excel w ASP.NET MVC bez pakietu Microsoft Office?

IronXL pozwala na odczytywanie plików Excel bezpośrednio w C# bez żadnych zależności od Microsoft Office. Wystarczy zainstalować IronXL za pośrednictwem NuGet, a następnie użyć WorkBook.Load(), aby otworzyć plik Excel i przekonwertować go na DataTable za pomocą zaledwie jednej linii kodu: var dataTable = IronXl.WorkBook.Load('CustomerData.xlsx').DefaultWorkSheet.ToDataTable(true);

Jaki jest najszybszy sposób konwersji danych z Excela do DataTable w ASP.NET?

IronXL udostępnia metodę ToDataTable(), która natychmiast konwertuje arkusze kalkulacyjne Excel na obiekty System.Data.DataTable. Po załadowaniu skoroszytu za pomocą IronXL należy przejść do dowolnego arkusza i wywołać metodę ToDataTable(true), aby uwzględnić nagłówki. Konwersja ta wymaga zaledwie jednej linii kodu i działa płynnie z widokami ASP.NET MVC.

Którą wersję .NET należy używać do przetwarzania plików Excel w aplikacjach internetowych?

IronXL obsługuje .NET Framework 4.6.2+ i .NET Core 3.1+. W przypadku nowych projektów ASP.NET MVC zaleca się użycie .NET 6.0 lub nowszego, ponieważ oferuje on ulepszone zarządzanie pamięcią podczas przetwarzania dużych plików Excel za pomocą IronXL oraz lepszą obsługę async/await dla operacji na arkuszach kalkulacyjnych.

Który szablon projektu Visual Studio najlepiej sprawdza się w przypadku funkcji odczytu plików Excel?

Podczas tworzenia projektu wybierz szablon „ASP.NET Core Web App (Model-View-Controller)”. Ta struktura MVC doskonale uzupełnia funkcję konwersji DataTable w IronXL, umożliwiając ładowanie i przetwarzanie plików Excel w kontrolerach przy jednoczesnym przejrzystym wyświetlaniu danych w widokach.

Jak zainstalować bibliotekę do odczytu plików Excel w moim projekcie ASP.NET?

Zainstaluj IronXL za pomocą konsoli NuGet Package Manager, uruchamiając polecenie „Install-Package IronXl.Excel”. Po instalacji sprawdź, czy biblioteka została poprawnie dodana, sprawdzając zależności projektu i dodając „using IronXL;” do kontrolera — IntelliSense powinno natychmiast rozpoznać przestrzeń nazw.

Curtis Chau
Autor tekstów technicznych

Curtis Chau posiada tytuł licencjata z informatyki (Uniwersytet Carleton) i specjalizuje się w front-endowym rozwoju, z ekspertką w Node.js, TypeScript, JavaScript i React. Pasjonuje się tworzeniem intuicyjnych i estetycznie przyjemnych interfejsów użytkownika, Curtis cieszy się pracą z nowoczesnymi frameworkami i tworzeniem dobrze zorganizowanych, atrakcyjnych wizualnie podrę...

Czytaj więcej
Gotowy, aby rozpocząć?
Nuget Pliki do pobrania 1,950,735 | Wersja: 2026.4 just released
Still Scrolling Icon

Wciąż przewijasz?

Czy chcesz szybko dowodu? PM > Install-Package IronXl.Excel
uruchom próbkę zobacz, jak Twoje dane stają się arkuszem.