Passer au contenu du pied de page
COMPARER à D'AUTRES COMPOSANTS

Exportation ASP.NET vers Excel : Comparaison entre IronXL , ClosedXML et EPPlus

L'exportation de données vers Excel est une exigence standard dans les applications web ASP.NET Core. Que vous génériez des rapports de vente, permettiez aux utilisateurs de télécharger le contenu de GridView ou produisiez des fichiers CSV à partir de requêtes de base de données, l'approche que vous choisissez détermine si le fichier résultant s'ouvre proprement dans Microsoft Excel ou déclenche des avertissements de format. Cet article compare les méthodes d'exportation Excel les plus courantes disponibles pour les développeurs C# -- streaming traditionnel basé sur HTML, et solutions de bibliothèques modernes incluant IronXL, ClosedXML, et EPPlus -- afin que vous puissiez choisir l'outil adéquat pour votre projet.

Commencez votre essai gratuit pour voir comment IronXL gère la génération de fichiers Excel dans les applications ASP.NET Core.

Quelles sont les méthodes courantes pour exporter des données vers Excel dans ASP.NET Core?

Les développeurs ASP.NET Core ont plusieurs options pour ajouter des fonctionnalités d'exportation Excel. Chaque approche diffère en termes de qualité du fichier de sortie, de l'effort requis pour l'implémenter, et des implications de licence pour les projets commerciaux.

Le streaming de type MIME traditionnel est la technique la plus ancienne. Le serveur définit l'en-tête Content-Type de la réponse à application/vnd.ms-excel et écrit un tableau HTML dans le flux de sortie. Le navigateur interprète cela comme un téléchargement Excel, mais le fichier contient des balises HTML plutôt que de véritables données de feuille de calcul. Microsoft Excel détecte la discordance et affiche un avertissement de format avant d'ouvrir le fichier. Cette méthode ne peut pas prendre en charge les formules, les colonnes typées ou le formatage correct des cellules.

Les solutions basées sur des bibliothèques ajoutent un package NuGet qui construit de véritables fichiers XLSX en utilisant le format Open XML défini par Microsoft. Les options incluent IronXL, ClosedXML, et EPPlus. Tous les trois produisent des fichiers Excel valides qui s'ouvrent sans avertissements, supportent le formatage au niveau des cellules, et fonctionnent avec .NET Core. La documentation officielle .NET pour les téléchargements de fichiers couvre les mécanismes sous-jacents d'ASP.NET Core utilisés par toutes ces approches.

Le tableau ci-dessous résume les principales différences :

Comparaison de bibliothèque d'exportation Excel : matrice de fonctionnalités
Caractéristique Type MIME / HTML ClosedXML EPPlus IronXL
Sortie XLSX authentique Non Oui Oui Oui
Prise en charge des fichiers CSV Manuel Limitée Limitée Natif
S'ouvre sans avertissement Excel Non Oui Oui Oui
Prise en charge des formules Non Oui Oui Oui
Exportation JSON et XML Non Non Non Oui
Licence commerciale N/A MIT Polyform Commercial
support .NET Core Oui Oui Oui Oui

Comment installer IronXL dans un projet ASP.NET Core ?

Avant de rédiger du code d'exportation, ajoutez IronXL à votre projet par le biais du Gestionnaire de Packages NuGet ou du .NET CLI. IronXL n'a pas de dépendance à Microsoft Office ou interopérabilité COM, donc l'installation est simple sur tout système d'exploitation supporté par .NET.

dotnet add package IronXl.Excel
dotnet add package IronXl.Excel
SHELL

Alternativement, utilisez la Console du Gestionnaire de Packages dans Visual Studio :

Install-Package IronXl.Excel
Install-Package IronXl.Excel
SHELL

Une fois le package installé, ajoutez using IronXL; à tout contrôleur ou classe de service qui a besoin de générer des fichiers Excel. Aucune configuration additionnelle n'est requise pour des scénarios d'exportation de base. Pour les options de licence et de déploiement, visitez la page de licence IronXL.

Comment fonctionne l'approche traditionnelle de l'exportation de grilles de visualisation ?

Dans les WebForms hérités et certains anciens modèles MVC, les développeurs exportaient les données de GridView en les rendant sous forme HTML et en les diffusant au navigateur avec un en-tête Content-Type trompeur. L'application appelle Response.AddHeader pour définir le nom du fichier et écrit directement la sortie HTML.

// Traditional approach -- exports HTML disguised as Excel
public void ExportToExcel(object sender, EventArgs e)
{
    Response.Clear();
    Response.Buffer = true;
    Response.ContentType = "application/vnd.ms-excel";
    Response.AddHeader("content-disposition", "attachment;filename=Report.xls");
    StringWriter stringWriter = new StringWriter();
    HtmlTextWriter htmlTextWriter = new HtmlTextWriter(stringWriter);
    // Render grid content as HTML
    DataGrid1.RenderControl(htmlTextWriter);
    Response.Write(stringWriter.ToString());
    Response.End();
}

public override void VerifyRenderingInServerForm(Control control)
{
    // Required to prevent server form rendering errors
}
// Traditional approach -- exports HTML disguised as Excel
public void ExportToExcel(object sender, EventArgs e)
{
    Response.Clear();
    Response.Buffer = true;
    Response.ContentType = "application/vnd.ms-excel";
    Response.AddHeader("content-disposition", "attachment;filename=Report.xls");
    StringWriter stringWriter = new StringWriter();
    HtmlTextWriter htmlTextWriter = new HtmlTextWriter(stringWriter);
    // Render grid content as HTML
    DataGrid1.RenderControl(htmlTextWriter);
    Response.Write(stringWriter.ToString());
    Response.End();
}

public override void VerifyRenderingInServerForm(Control control)
{
    // Required to prevent server form rendering errors
}
$vbLabelText   $csharpLabel

Sortie de légende

ASP.NET Exporter vers Excel : Meilleure comparaison d'outils pour les développeurs C# : Image 1 - Sortie d'exportation Excel hérité

Cette méthode nécessite de remplacer VerifyRenderingInServerForm pour contourner la validation côté serveur. Le fichier généré contient du HTML plutôt que de véritables données de feuille de calcul, donc Microsoft Excel affiche un avertissement de format lorsque l'utilisateur l'ouvre. La sortie ne peut pas prendre en charge les formules de feuille de calcul, les colonnes de données typées, ou le formatage au niveau des cellules. Pour tout nouveau développement ASP.NET Core, ce modèle doit être évité au profit d'une véritable bibliothèque Excel.

Comment IronXL for .NET simplifie-t-il la génération de fichiers Excel en ASP.NET Core?

IronXL fournit une API pour créer de véritables fichiers XLSX sans nécessiter Microsoft Office ou interopérabilité COM. La bibliothèque construit des objets classeurs entièrement en code managé, donc elle fonctionne sur Linux, macOS, et Windows sans dépendances supplémentaires.

L'exemple suivant crée un classeur, remplit une feuille de calcul avec des données de vente, applique un format gras à la ligne d'en-tête, et diffuse le fichier au navigateur :

using IronXL;
using Microsoft.AspNetCore.Mvc;

public class ExportController : Controller
{
    [HttpPost]
    public IActionResult ExportReport()
    {
        // Create workbook and worksheet
        WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
        WorkSheet worksheet = workbook.CreateWorkSheet("Sales Data");

        // Add header row
        worksheet["A1"].Value = "Product";
        worksheet["B1"].Value = "Quantity";
        worksheet["C1"].Value = "Revenue";

        // Populate data rows
        worksheet["A2"].Value = "Widget A";
        worksheet["B2"].Value = 150;
        worksheet["C2"].Value = 4500.00;
        worksheet["A3"].Value = "Widget B";
        worksheet["B3"].Value = 230;
        worksheet["C3"].Value = 6900.00;

        // Apply bold formatting to headers
        var headerRange = worksheet["A1:C1"];
        headerRange.Style.Font.Bold = true;

        // Stream file to browser
        byte[] fileBytes = workbook.ToByteArray();
        string filename = $"SalesReport_{DateTime.Nonw:yyyyMMdd}.xlsx";
        return File(fileBytes,
            "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
            filename);
    }
}
using IronXL;
using Microsoft.AspNetCore.Mvc;

public class ExportController : Controller
{
    [HttpPost]
    public IActionResult ExportReport()
    {
        // Create workbook and worksheet
        WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
        WorkSheet worksheet = workbook.CreateWorkSheet("Sales Data");

        // Add header row
        worksheet["A1"].Value = "Product";
        worksheet["B1"].Value = "Quantity";
        worksheet["C1"].Value = "Revenue";

        // Populate data rows
        worksheet["A2"].Value = "Widget A";
        worksheet["B2"].Value = 150;
        worksheet["C2"].Value = 4500.00;
        worksheet["A3"].Value = "Widget B";
        worksheet["B3"].Value = 230;
        worksheet["C3"].Value = 6900.00;

        // Apply bold formatting to headers
        var headerRange = worksheet["A1:C1"];
        headerRange.Style.Font.Bold = true;

        // Stream file to browser
        byte[] fileBytes = workbook.ToByteArray();
        string filename = $"SalesReport_{DateTime.Nonw:yyyyMMdd}.xlsx";
        return File(fileBytes,
            "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
            filename);
    }
}
$vbLabelText   $csharpLabel

Sortie IronXL

ASP.NET Exporter vers Excel : Meilleure comparaison d'outils pour les développeurs C# : Image 2 - Sortie d'exportation vers Excel avec IronXL

WorkBook.Create construit un nouveau document Excel en mémoire. CreateWorkSheet ajoute un onglet nommé que les utilisateurs voient au bas de la fenêtre Excel. Les valeurs des cellules sont assignées en utilisant la notation de gamme de type Excel ("A1", "B2"), que la plupart des développeurs C# trouvent lisible et facile à maintenir.

La méthode ToByteArray() convertit le classeur terminé en un tableau d'octets, que la méthode de réponse File() d'ASP.NET Core diffuse directement au navigateur de l'utilisateur avec les en-têtes de type MIME et de disposition de contenu corrects. Le fichier téléchargé s'ouvre dans Excel sans aucun avertissement de format.

IronXL prend également en charge l'exportation au format CSV par la méthode SaveAsCsv :

// Export as CSV instead of XLSX
workbook.SaveAsCsv("output.csv");
// Export as CSV instead of XLSX
workbook.SaveAsCsv("output.csv");
$vbLabelText   $csharpLabel

Pour les scénarios où vous avez besoin d'exporter les données des feuilles de calcul au format JSON ou XML, IronXL fournit les méthodes SaveAsJson et SaveAsXml - des capacités non disponibles dans ClosedXML ou EPPlus. Vous pouvez trouver des motifs supplémentaires dans les exemples de code IronXL et la référence API.

Comment IronXL gère-t-il DataTable et l'intégration de la base de données ?

De nombreuses applications ASP.NET Core extraient des données de SQL Server ou d'une autre base de données relationnelle avant de les exporter. IronXL fournit un support de premier ordre pour charger un DataTable directement dans une feuille de travail, éliminant le besoin d'itérer manuellement les lignes.

L'exemple ci-dessous interroge une base de données via ADO.NET et remplit une feuille de calcul Excel à partir du DataTable résultant :

using IronXL;
using System.Data;
using System.Data.SqlClient;
using Microsoft.AspNetCore.Mvc;

public class ReportController : Controller
{
    private readonly string _connectionString;

    public ReportController(IConfiguration config)
    {
        _connectionString = config.GetConnectionString("DefaultConnection");
    }

    [HttpGet]
    public IActionResult DownloadReport()
    {
        DataTable table = new DataTable();

        using (SqlConnection connection = new SqlConnection(_connectionString))
        {
            string query = "SELECT OrderId, CustomerName, Total, OrderDate FROM Orders";
            using SqlDataAdapter adapter = new SqlDataAdapter(query, connection);
            adapter.Fill(table);
        }

        WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
        WorkSheet worksheet = workbook.CreateWorkSheet("Orders");

        // Write column headers from DataTable schema
        for (int col = 0; col < table.Columns.Count; col++)
        {
            worksheet[0, col].Value = table.Columns[col].ColumnName;
        }

        // Write data rows
        for (int row = 0; row < table.Rows.Count; row++)
        {
            for (int col = 0; col < table.Columns.Count; col++)
            {
                worksheet[row + 1, col].Value = table.Rows[row][col].ToString();
            }
        }

        byte[] fileBytes = workbook.ToByteArray();
        return File(fileBytes,
            "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
            "Orders.xlsx");
    }
}
using IronXL;
using System.Data;
using System.Data.SqlClient;
using Microsoft.AspNetCore.Mvc;

public class ReportController : Controller
{
    private readonly string _connectionString;

    public ReportController(IConfiguration config)
    {
        _connectionString = config.GetConnectionString("DefaultConnection");
    }

    [HttpGet]
    public IActionResult DownloadReport()
    {
        DataTable table = new DataTable();

        using (SqlConnection connection = new SqlConnection(_connectionString))
        {
            string query = "SELECT OrderId, CustomerName, Total, OrderDate FROM Orders";
            using SqlDataAdapter adapter = new SqlDataAdapter(query, connection);
            adapter.Fill(table);
        }

        WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
        WorkSheet worksheet = workbook.CreateWorkSheet("Orders");

        // Write column headers from DataTable schema
        for (int col = 0; col < table.Columns.Count; col++)
        {
            worksheet[0, col].Value = table.Columns[col].ColumnName;
        }

        // Write data rows
        for (int row = 0; row < table.Rows.Count; row++)
        {
            for (int col = 0; col < table.Columns.Count; col++)
            {
                worksheet[row + 1, col].Value = table.Rows[row][col].ToString();
            }
        }

        byte[] fileBytes = workbook.ToByteArray();
        return File(fileBytes,
            "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
            "Orders.xlsx");
    }
}
$vbLabelText   $csharpLabel

Ce modèle garde le contrôleur allégé et testable. La requête de la base de données et la construction du classeur sont clairement séparées, rendant aisé de changer la source de données ou d'ajouter des feuilles de travail supplémentaires pour les données résumées. Pour des conseils sur la lecture de fichiers Excel existants dans un DataTable, voir le guide IronXL sur la lecture de fichiers Excel.

Comment ClosedXML et EPPlus se comparent-ils?

ClosedXML enveloppe le SDK Open XML de Microsoft avec une API accessible. Installez-le depuis NuGet :

Install-Package ClosedXML
Install-Package ClosedXML
SHELL

L'exemple suivant montre une action typique d'exportation ClosedXML :

using ClosedXML.Excel;
using Microsoft.AspNetCore.Mvc;

public class ExportController : Controller
{
    [HttpGet]
    public IActionResult ExportWithClosedXML()
    {
        using var workbook = new XLWorkbook();
        var worksheet = workbook.AddWorksheet("Data");
        worksheet.Cell(1, 1).Value = "Name";
        worksheet.Cell(1, 2).Value = "Amount";
        worksheet.Cell(2, 1).Value = "Alpha";
        worksheet.Cell(2, 2).Value = 1200;

        using var stream = new MemoryStream();
        workbook.SaveAs(stream);
        return File(stream.ToArray(),
            "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
            "export.xlsx");
    }
}
using ClosedXML.Excel;
using Microsoft.AspNetCore.Mvc;

public class ExportController : Controller
{
    [HttpGet]
    public IActionResult ExportWithClosedXML()
    {
        using var workbook = new XLWorkbook();
        var worksheet = workbook.AddWorksheet("Data");
        worksheet.Cell(1, 1).Value = "Name";
        worksheet.Cell(1, 2).Value = "Amount";
        worksheet.Cell(2, 1).Value = "Alpha";
        worksheet.Cell(2, 2).Value = 1200;

        using var stream = new MemoryStream();
        workbook.SaveAs(stream);
        return File(stream.ToArray(),
            "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
            "export.xlsx");
    }
}
$vbLabelText   $csharpLabel

Sortie ClosedXML

ASP.NET Exporter vers Excel : Meilleure comparaison d'outils pour les développeurs C# : Image 3 - Sortie d'exportation vers Excel avec ClosedXML

ClosedXML utilise l'adressage cellulaire basé sur des entiers (Cell(row, col)) plutôt que la notation de chaîne de gamme utilisée par IronXL. Les deux approches produisent des fichiers XLSX valides. ClosedXML est distribué sous la licence MIT, le rendant approprié pour les projets open-source sans préoccupations liées à la licence commerciale. Le dépôt GitHub ClosedXML fournit un suivi des problèmes et des exemples fournis par la communauté.

EPPlus offre des fonctionnalités similaires sous sa licence Polyform Nonn-Commerciale pour un usage non-commercial, avec une licence commerciale requise pour les déploiements de production. Consultez l'aperçu de la licence EPPlus avant de l'utiliser dans un produit commercial. EPPlus et ClosedXML produisent tous deux des fichiers Excel valides mais aucun n'offre une exportation native CSV, JSON, ou XML comme le fait IronXL.

Le tableau ci-dessous compare les capacités spécifiques pertinentes pour les applications ASP.NET Core en production :

Comparaison détaillée des capacités pour les projets ASP.NET Core en production
Capacité IronXL ClosedXML EPPlus
Exportation CSV, JSON, et XML Natif Nonn disponible Nonn disponible
Intégration DataTable Oui Oui Oui
Support technique Inclus avec la licence Communauté uniquement Échelon payant
Dépendance à Microsoft Office Aucune Aucune Aucune
Multi-plateforme (.NET sur Linux) Oui Oui Oui
Type de licence Commercial MIT Polyform / Commercial

Comment choisir la bonne bibliothèque pour votre projet ?

Choisir la bonne bibliothèque d'exportation Excel dépend de trois facteurs : les formats de sortie requis, les contraintes de licence de votre projet, et si vous avez besoin d'un support professionnel.

Choisissez IronXL lorsque votre application nécessite une sortie multi-format (XLSX, CSV, JSON, XML), lorsque vous construisez un produit commercial qui nécessite un canal de support garanti, ou lorsque vous avez besoin de fonctions Excel avancées telles que l'évaluation de formules, le style des cellules, ou la génération de graphiques. La documentation d'IronXL couvre en détail chaque surface API, et l'équipe de support répond directement aux titulaires de licence. Consultez le blog IronXL pour des motifs supplémentaires et des tutoriels.

Choisissez ClosedXML lorsque votre projet est open-source ou non-commercial et nécessite uniquement une sortie XLSX. La licence MIT n'impose aucune restriction sur la redistribution, et l'API est bien documentée grâce aux ressources communautaires.

Choisissez EPPlus lorsque une base de code existante utilise déjà EPPlus et que migrer vers une autre bibliothèque coûterait plus cher que d'acheter une licence commerciale.

Pour les équipes évaluant IronXL par rapport à ses alternatives, la licence d'essai IronXL permet un test complet des fonctionnalités avant de s'engager dans un achat. Des exemples de code supplémentaires pour lire et écrire des fichiers Excel sont disponibles sur la page d'exemples IronXL.

Quelles sont vos prochaines étapes ?

Maintenant que vous avez passé en revue les approches d'exportation Excel disponibles pour ASP.NET Core, vous pouvez suivre les étapes suivantes pour aller de l'avant :

  • Installez IronXL en utilisant dotnet add package IronXl.Excel et parcourez le guide de démarrage pour créer votre premier classeur.
  • Comparez les motifs de code en consultant la page des exemples IronXL pour des scénarios correspondant à votre cas d'utilisation, tels que l'exportation de bases de données, les classeurs multi-feuilles ou les rapports stylisés.
  • Évaluez la licence en visitant la page de licence IronXL pour comprendre les options de développement, de mise en scène, et de déploiements en production.
  • Explorez des formats supplémentaires en testant les méthodes SaveAsCsv, SaveAsJson, et SaveAsXml si votre application a besoin d'exporter des données dans plusieurs formats à partir du même code source.
  • Migrez du code hérité en identifiant les motifs existants Response.ContentType = "application/vnd.ms-excel" dans votre solution et en les remplaçant par la création de classeurs IronXL, éliminant les avertissements de format pour vos utilisateurs.

Pour les déploiements en production, achetez une licence pour débloquer le support professionnel et garantir la conformité avec les termes de la licence IronXL.

Commencez avec IronXL maintenant.
green arrow pointer

Questions Fréquemment Posées

Quelles sont les principales caractéristiques d'IronXL pour l'exportation vers Excel en ASP.NET Core ?

IronXL génère des fichiers XLSX, CSV, JSON et XML authentiques sans nécessiter Microsoft Office. Il offre une API intuitive pour la gestion des classeurs et des feuilles de calcul, la mise en forme des cellules, l'évaluation des formules et l'intégration de DataTable, le tout dans du code managé .NET standard.

Comment IronXL se compare-t-il à ClosedXML pour les projets ASP.NET Core ?

IronXL prend en charge plusieurs formats d'exportation (XLSX, CSV, JSON, XML) et propose une assistance professionnelle avec une licence commerciale. ClosedXML génère des fichiers XLSX valides sous licence MIT, ce qui le rend idéal pour les projets open source nécessitant uniquement une sortie sous forme de tableur.

IronXL est-il adapté à la création de rapports Excel à partir de bases de données en ASP.NET ?

Oui. IronXL fonctionne directement avec les objets DataTable et les résultats des requêtes .NET , ce qui simplifie le remplissage des feuilles de calcul à partir de SQL Server ou d'autres bases de données relationnelles et la diffusion du fichier résultant vers le navigateur.

Quels sont les avantages d'utiliser IronXL par rapport à EPPlus ?

IronXL prend en charge nativement l'exportation aux formats CSV, JSON et XML, inclut une assistance professionnelle avec chaque licence commerciale et n'impose aucune restriction pour un usage non commercial. EPPlus nécessite une licence commerciale distincte pour une utilisation en production et ne propose pas d'exportation multiformat native.

IronXL peut-il gérer de grands ensembles de données efficacement?

IronXL est conçu pour les charges de travail côté serveur et gère les grands ensembles de données sans nécessiter Microsoft Excel ni l'interopérabilité COM. Pour les exportations très volumineuses, la diffusion directe du tableau d'octets via la réponse File() ASP.NET Core évite la mise en mémoire tampon de l'intégralité du fichier.

IronXL nécessite-t-il l'installation de Microsoft Office pour l'exportation vers Excel ?

Non. IronXL fonctionne entièrement en code .NET managé et ne dépend d'aucune application Microsoft Office, d'interopérabilité COM ni de l'automatisation Office. Il est compatible avec Windows, Linux et macOS partout où .NET est pris en charge.

Jordi Bardia
Ingénieur logiciel
Jordi est le plus compétent en Python, C# et C++, et lorsqu'il ne met pas à profit ses compétences chez Iron Software, il programme des jeux. Partageant les responsabilités des tests de produit, du développement de produit et de la recherche, Jordi apporte une immense valeur à l'amé...
Lire la suite

Iron Support Team

We're online 24 hours, 5 days a week.
Chat
Email
Call Me