Odczytywanie plików Excel w ASP.NET MVC za pomocą C# z IronXL

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

IronXL pozwala programistom ASP.NET MVC na czytanie plików Excela bezpośrednio w C# bez zależności od Microsoft Office, konwertując dane Excela do System.Data.DataTable dla łatwego wyświetlania w widokach sieciowych przy użyciu zaledwie 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 Excela, wybierz jego pierwszy arkusz i skonwertuj go do System.Data.DataTable używając IronXL — bez Interopu, bez kłopotó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 .NET 6+ frameworks, ulepszoną funkcjonalność IntelliSense dla metod IronXL oraz lepszą wydajność podczas pracy z dużymi plikami Excela. Integracja NuGet w IDE sprawia, że instalowanie IronXL jest szczególnie proste.

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 działa doskonale z konwersją IronXL na DataTable, pozwalając na ładowanie arkuszy kalkulacyjnych 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ć, że IronXL jest poprawnie zainstalowane, 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 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 Excela przy użyciu metody IronXL z Load. Ścieżka pliku Excel (w tym nazwa pliku) jest podawana jako parametr wywołania metody. Następnie wybierz pierwszy arkusz Excela jako arkusz roboczy i załaduj dane w nim zawarte do obiektu DataTable. Na koniec, wyślij DataTable do frontend.

DataTable jest idealne dla ASP.NET MVC, ponieważ integruje się bezproblemowo z widokami Razor i zapewnia wbudowane wsparcie dla iteracji przez wiersze i kolumny. W przeciwieństwie do obiektów niestandardowych, DataTable nie wymaga mapowania modelu i automatycznie obsługuje mieszane typy danych. Możesz także 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 oferuje wiele sposobów na wybór i pracę z określonymi arkuszami kalkulacyjnymi. Możesz uzyskać dostęp do arkuszy poprzez indeks, nazwę lub iterować przez wszystkie dostępne arkusze:

:path=/static-assets/excel/content-code-examples/how-to/asp-net-mvc-read-excel-file-5.cs
// 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
}
Imports System

' 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?

Następny 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:

Arkusz kalkulacyjny Excel z nazwami klientów, kosztami wysyłki i cenami jednostkowymi - przykładowe dane do samouczka wyświetlania w sieci

Plik Excel

Otwórz widok index.cshtml (widok indeksu) i zamień kod na poniższy kod 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>
}

Dlaczego używać Bootstrap do stylizacji tabel?

Powyższy kod używa zwróconego z metody DataTable jako modelu. Każdy wiersz z tabeli jest drukowany na stronie internetowej za pomocą pętli @for, w tym formatowania 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ą tabelę o ciemnym motywie, która jest łatwa do odczytania. Dla bardziej zaawansowanego formatowania Excela, takiego jak obramowania komórek i wyrównanie lub wzory i kolory tła, IronXL zapewnia dodatkowe metody dostępu do danych ustrukturyzowanych bezpośrednio.

Jak wygląda efekt końcowy?

Uruchomienie projektu generuje wyniki pokazane poniżej:

Tabela Bootstrap wyświetlająca dane klientów z Excela z nazwami, kosztami wysyłki i cenami jednostkowymi w aplikacji ASP.NET MVC

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 udoskonalenie wyświetla poprawne nagłówki kolumn, takie jak "Nazwa klienta", "Koszt wysyłki" i "Cena jednostkowa" z pliku Excel. Dla bardziej skomplikowanych scenariuszy dotyczących zakresów nazwanych lub tabel nazwanych, IronXL zapewnia dodatkowe metody dostępu do danych ustrukturyzowanych 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 2,150,290 | Wersja: 2026.7 właśnie wydany
Still Scrolling Icon

Wciąż przewijasz?

Chcesz szybkiego dowodu? PM > Install-Package IronXL.Excel
uruchom próbkę zobacz, jak Twoje dane stają się arkuszem.