Passer au contenu du pied de page
UTILISATION D'IRONXL

Télécharger un fichier Excel en .NET C# : Exporter des données aux formats XLSX, CSV et plus encore

La mise en œuvre d'une fonctionnalité d'exportation de feuilles de calcul est une exigence courante pour les applications Web d'entreprise, mais le processus manuel de génération et de livraison de ces fichiers introduit souvent une complexité technique importante. Les développeurs doivent fréquemment naviguer dans les subtilités de la gestion de MemoryStream et configurer des en-têtes HTTP Content-Disposition précis afin de garantir un comportement cohérent du navigateur et d'éviter la corruption des données.

Cet article explique en détail tout ce qu'il faut savoir pour créer et télécharger un fichier Excel dans les contrôleurs .NET C# MVC en utilisant la bibliothèque IronXL . Nous verrons comment exporter des données vers de véritables fichiers Excel au format XLSX, lire en continu des fichiers CSV, convertir les fichiers téléchargés pour une réexportation et afficher les téléchargements directement dans le navigateur, le tout sans installer Microsoft Office ni utiliser Excel Interop. Installez le package NuGet IronXL et profitez d'un essai gratuit pour suivre les exemples de code source.

NuGet Installer avec NuGet

PM >  Install-Package IronXl.Excel

Consultez IronXL sur NuGet pour une installation rapide. Avec plus de 10 millions de téléchargements, il transforme le développement PDF avec C#. Vous pouvez également télécharger le DLL.

Comment créer et télécharger un fichier Excel à partir d'un contrôleur ?

Le modèle de base pour tout téléchargement de fichier Excel dans un scénario ASP.NET Core comprend trois étapes : créer le classeur, l'écrire dans un flux et renvoyer le flux sous forme de fichier de réponse. Le code suivant illustre une action complète de contrôleur MVC qui crée un fichier XLSX à partir de zéro et l'envoie au navigateur.

using IronXL;
using Microsoft.AspNetCore.Mvc;
public class ReportController : Controller
{
    // Export employee data as a downloadable Excel file
    public IActionResult DownloadExcel()
    {
        // Create a new workbook and worksheet
        var workbook = WorkBook.Create(ExcelFileFormat.XLSX);
        var worksheet = workbook.CreateWorkSheet("Employees");
        // Add header row with column names
        worksheet["A1"].Value = "Name";
        worksheet["B1"].Value = "Department";
        worksheet["C1"].Value = "Salary";
        // Populate cells with data values
        worksheet["A2"].Value = "Alice Torres";
        worksheet["B2"].Value = "Engineering";
        worksheet["C2"].Value = 95000;
        worksheet["A3"].Value = "James Park";
        worksheet["B3"].Value = "Marketing";
        worksheet["C3"].Value = 78000;
        // Export workbook to a MemoryStream for download
        var stream = workbook.ToStream();
        string filename = "Employees.xlsx";
        var content = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
        // Return file to the browser with content disposition attachment
        return File(stream, content, filename);
    }
}
using IronXL;
using Microsoft.AspNetCore.Mvc;
public class ReportController : Controller
{
    // Export employee data as a downloadable Excel file
    public IActionResult DownloadExcel()
    {
        // Create a new workbook and worksheet
        var workbook = WorkBook.Create(ExcelFileFormat.XLSX);
        var worksheet = workbook.CreateWorkSheet("Employees");
        // Add header row with column names
        worksheet["A1"].Value = "Name";
        worksheet["B1"].Value = "Department";
        worksheet["C1"].Value = "Salary";
        // Populate cells with data values
        worksheet["A2"].Value = "Alice Torres";
        worksheet["B2"].Value = "Engineering";
        worksheet["C2"].Value = 95000;
        worksheet["A3"].Value = "James Park";
        worksheet["B3"].Value = "Marketing";
        worksheet["C3"].Value = 78000;
        // Export workbook to a MemoryStream for download
        var stream = workbook.ToStream();
        string filename = "Employees.xlsx";
        var content = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
        // Return file to the browser with content disposition attachment
        return File(stream, content, filename);
    }
}
$vbLabelText   $csharpLabel

Fichier Excel de sortie

Télécharger un fichier Excel en .NET C# : Exporter des données vers XLSX, CSV et plus : Image 1 - exemple de résultat pour le téléchargement d'un fichier Excel en .NET C#

La méthode WorkBook.Create génère un nouveau document Excel, et CreateWorkSheet y ajoute la première feuille de calcul. Après avoir rempli les cellules avec des valeurs, la méthode ToStream convertit l'intégralité du classeur en un MemoryStream ; aucun fichier temporaire n'est enregistré sur le disque. La méthode de retour File() du contrôleur définit l'en-tête Content Disposition sur attachment, ce qui indique au navigateur de télécharger le fichier plutôt que d'essayer de l'afficher. Le troisième paramètre détermine comment le nom du fichier apparaît dans la boîte de dialogue de téléchargement de l'utilisateur.

Ce modèle IActionResult public fonctionne aussi bien avec les projets .NET Framework qu'avec les projets ASP.NET Core , ce qui en fait l'approche de choix pour les applications Web qui doivent exporter des données vers Excel .

Comment exporter les données d'une base de données vers une feuille de calcul téléchargeable ?

Dans la plupart des cas concrets, il s'agit d'exporter des données à partir d'une table de base de données plutôt que d'utiliser des valeurs codées en dur. Le processus reste le même : interroger les données, remplir les feuilles de calcul et renvoyer le fichier. Voici un exemple qui simule l'extraction d'enregistrements d'une base de données et leur écriture dans un document Excel.

using IronXL;
using Microsoft.AspNetCore.Mvc;
public class DataExportController : Controller
{
    // Export database records to an xlsx file for download
    public IActionResult ExportDatabaseReport()
    {
        // Simulate a database query returning order records
        var orders = new[]
        {
            new { OrderId = 1001, Customer = "Acme Corp", Total = 4500.00m },
            new { OrderId = 1002, Customer = "Globex Inc", Total = 12300.50m },
            new { OrderId = 1003, Customer = "Initech LLC", Total = 890.75m },
        };
        var workbook = WorkBook.Create(ExcelFileFormat.XLSX);
        var worksheet = workbook.CreateWorkSheet("Orders");
        // Write headers
        worksheet["A1"].Value = "Order ID";
        worksheet["B1"].Value = "Customer";
        worksheet["C1"].Value = "Total";
        // Write each row of data from the query results
        for (int i = 0; i < orders.Length; i++)
        {
            int row = i + 2;
            worksheet[$"A{row}"].Value = orders[i].OrderId;
            worksheet[$"B{row}"].Value = orders[i].Customer;
            worksheet[$"C{row}"].Value = orders[i].Total;
        }
        var stream = workbook.ToStream();
        string filename = $"OrderReport-{DateTime.Now:yyyyMMdd}.xlsx";
        return File(stream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", filename);
    }
}
using IronXL;
using Microsoft.AspNetCore.Mvc;
public class DataExportController : Controller
{
    // Export database records to an xlsx file for download
    public IActionResult ExportDatabaseReport()
    {
        // Simulate a database query returning order records
        var orders = new[]
        {
            new { OrderId = 1001, Customer = "Acme Corp", Total = 4500.00m },
            new { OrderId = 1002, Customer = "Globex Inc", Total = 12300.50m },
            new { OrderId = 1003, Customer = "Initech LLC", Total = 890.75m },
        };
        var workbook = WorkBook.Create(ExcelFileFormat.XLSX);
        var worksheet = workbook.CreateWorkSheet("Orders");
        // Write headers
        worksheet["A1"].Value = "Order ID";
        worksheet["B1"].Value = "Customer";
        worksheet["C1"].Value = "Total";
        // Write each row of data from the query results
        for (int i = 0; i < orders.Length; i++)
        {
            int row = i + 2;
            worksheet[$"A{row}"].Value = orders[i].OrderId;
            worksheet[$"B{row}"].Value = orders[i].Customer;
            worksheet[$"C{row}"].Value = orders[i].Total;
        }
        var stream = workbook.ToStream();
        string filename = $"OrderReport-{DateTime.Now:yyyyMMdd}.xlsx";
        return File(stream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", filename);
    }
}
$vbLabelText   $csharpLabel

Sortie

Télécharger un fichier Excel en .NET C# : Exporter des données vers XLSX, CSV et plus : Image 2 - Résultat de l'exportation de données d'une base de données vers un fichier Excel

En production, le tableau des commandes proviendrait d'une requête Entity Framework Core, d'un appel Dapper ou de toute couche d'accès aux données connectée à la base de données via une chaîne de connexion. La boucle parcourt les résultats et inscrit chaque valeur dans les cellules correspondantes de la feuille de calcul. Notez que le nom de fichier inclut une date, un petit détail qui évite bien des soucis lorsque les utilisateurs téléchargent des fichiers à répétition.

Le système d'adressage des cellules d'IronXL (worksheet[$"A{row}"]) assure la lisibilité, et l' API WorkBook gère en interne tout le travail complexe de création d'un fichier XLSX valide. Pour des scénarios plus complexes impliquant des formules, des styles ou des classeurs à plusieurs feuilles, la même approche s'adapte parfaitement.

Comment télécharger des données au format CSV plutôt qu'XLSX ?

Un fichier CSV léger est parfois préférable, notamment pour l'intégration de données dans d'autres systèmes, bases de données ou outils qui n'ont pas besoin de toutes les fonctionnalités d'un fichier Excel. IronXL simplifie considérablement la conversion entre les formats.

using IronXL;
using Microsoft.AspNetCore.Mvc;
public class CsvController : Controller
{
    // Export data as a CSV file download
    public IActionResult ExportCsv()
    {
        var workbook = WorkBook.Create(ExcelFileFormat.XLSX);
        var worksheet = workbook.CreateWorkSheet("Products");
        worksheet["A1"].Value = "SKU";
        worksheet["B1"].Value = "Product";
        worksheet["C1"].Value = "Price";
        worksheet["A2"].Value = "WDG-001";
        worksheet["B2"].Value = "Widget Pro";
        worksheet["C2"].Value = 29.99;
        // Convert to CSV stream instead of XLSX
        var stream = workbook.ToCsvStream();
        string filename = "Products.csv";
        return File(stream, "text/csv", filename);
    }
}
using IronXL;
using Microsoft.AspNetCore.Mvc;
public class CsvController : Controller
{
    // Export data as a CSV file download
    public IActionResult ExportCsv()
    {
        var workbook = WorkBook.Create(ExcelFileFormat.XLSX);
        var worksheet = workbook.CreateWorkSheet("Products");
        worksheet["A1"].Value = "SKU";
        worksheet["B1"].Value = "Product";
        worksheet["C1"].Value = "Price";
        worksheet["A2"].Value = "WDG-001";
        worksheet["B2"].Value = "Widget Pro";
        worksheet["C2"].Value = 29.99;
        // Convert to CSV stream instead of XLSX
        var stream = workbook.ToCsvStream();
        string filename = "Products.csv";
        return File(stream, "text/csv", filename);
    }
}
$vbLabelText   $csharpLabel

Fichier CSV de sortie

Télécharger un fichier Excel en .NET C# : Exporter des données vers XLSX, CSV et plus : Image 3 - Données téléchargées au format CSV au lieu d'Excel

La méthode ToCsvStream exporte la première feuille de calcul sous forme de MemoryStream au format CSV. Les fichiers CSV sont parfaits pour l'échange de données, mais ils suppriment toute mise en forme, formules et structure multi-feuilles. Lorsque vous avez besoin de ces fonctionnalités, utilisez le format de fichier XLSX via ToStream() ou ToXlsxStream(). Pour une analyse plus approfondie des conversions de format, reportez-vous au guide de conversion des feuilles de calcul .

Comment réexporter un fichier téléchargé dans un format différent ?

Un scénario courant d'application Web consiste à accepter les fichiers téléchargés par les utilisateurs et à les exporter dans un autre format, par exemple en convertissant un fichier XLS en XLSX ou en produisant des fichiers CSV à partir d'un classeur initialement enregistré dans un format ancien.

public IActionResult ConvertUpload(IFormFile upload)
{
    using var memoryStream = new MemoryStream();
    upload.CopyTo(memoryStream);
    memoryStream.Position = 0;
    // Load uploaded Excel file from the stream
    var workbook = WorkBook.Load(memoryStream);
    // Re-export as XLSX regardless of the original file extension or file type
    var stream = workbook.ToXlsxStream();
    string filename = Path.GetFileNameWithoutExtension(upload.FileName) + ".xlsx";
    return File(stream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", filename);
}
public IActionResult ConvertUpload(IFormFile upload)
{
    using var memoryStream = new MemoryStream();
    upload.CopyTo(memoryStream);
    memoryStream.Position = 0;
    // Load uploaded Excel file from the stream
    var workbook = WorkBook.Load(memoryStream);
    // Re-export as XLSX regardless of the original file extension or file type
    var stream = workbook.ToXlsxStream();
    string filename = Path.GetFileNameWithoutExtension(upload.FileName) + ".xlsx";
    return File(stream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", filename);
}
$vbLabelText   $csharpLabel

Résultat : Conversion du fichier CSV au format XLSX

Télécharger un fichier Excel en .NET C# : Exporter des données vers XLSX, CSV et plus : Image 4 - Exemple de résultat de la conversion de notre fichier CSV au format XLSX

La méthode WorkBook.Load accepte un MemoryStream ; il n'est donc pas nécessaire d'enregistrer les fichiers téléchargés sur le disque au préalable. Elle détecte automatiquement si la source est un fichier XLS, XLSX ou CSV et l'analyse en conséquence. À partir de là, ToXlsxStream() génère un nouveau MemoryStream propre au format XLSX moderne, chaque octet étant correctement structuré. Cela permet de normaliser les soumissions des utilisateurs avant tout traitement ou stockage ultérieur.

Quels formats de fichiers peuvent être exportés ?

IronXL prend en charge l'exportation de données vers de multiples formats de tableur et d'échange de données. Le tableau ci-dessous récapitule les options de sortie disponibles et leurs meilleures utilisations.

| Format| Extension de fichier | Méthode de flux | Cas d'utilisation optimal | | ---| ---| ---| ---| | XLSX | .xlsx | ToXlsxStream() | Feuilles de calcul Excel modernes avec mise en forme et formules | | XLS | .xls | ToXlsStream() | Compatibilité avec les systèmes existants | | CSV | .csv | ToCsvStream() | Importation de bases de données, pipelines de données, exportation légère | | XML | .xml | ToXmlStream() | Intégration des systèmes d'entreprise | | JSON | .json | EnregistrerAuJson() | Réponses et échanges de données des API Web | | HTML | .html | ExporterEnHTML() | Affichage sur page Web des données de feuille de calcul |

Chaque méthode de flux renvoie un MemoryStream qui se connecte directement à la fonction d'assistance de retour File() d' ASP.NET Core. L'alternative de tableau d'octets (ToByteArray()) est également disponible pour les scénarios où un byte[] est plus pratique, par exemple lors de l'enregistrement dans une base de données blob ou de la jonction à un flux de réponse par e-mail. Toutes ces méthodes sont disponibles immédiatement après l'installation du package NuGet IronXL . Pour une description complète de chaque format d'exportation, consultez la documentation relative à l'exportation vers Excel .

Que l'objectif soit de télécharger des fichiers au format XLSX pour les analystes commerciaux, d'exporter des fichiers CSV pour les ingénieurs de données ou de générer du XML pour l'intégration d'entreprise, IronXL garantit un code propre et une sortie fiable pour les applications .NET Core et .NET Framework . Prêt à exporter des feuilles de calcul pour votre prochain projet ? Obtenez une licence d'essai gratuite ou explorez les options de licence pour commencer dès aujourd'hui. Pour obtenir des instructions d'installation étape par étape, reportez-vous au guide de démarrage IronXL .

Questions Fréquemment Posées

Comment puis-je télécharger un fichier Excel dans ASP.NET Core en utilisant C# ?

Il est possible de télécharger un fichier Excel dans ASP.NET Core en utilisant C# grâce à IronXL. IronXL permet d'exporter des données vers différents formats tels que XLSX, CSV et XML directement depuis les contrôleurs MVC. Cette opération peut être gérée efficacement à l'aide de MemoryStream et de la méthode File().

Quels sont les avantages d'utiliser IronXL pour exporter des fichiers Excel ?

IronXL simplifie l'exportation des fichiers Excel en gérant efficacement MemoryStream et en configurant les en-têtes HTTP Content-Disposition. Il garantit un comportement cohérent du navigateur et prévient la corruption des données, ce qui en fait une solution idéale pour les applications web d'entreprise.

Quels formats de fichiers IronXL peut-il exporter?

IronXL peut exporter des données vers de multiples formats de fichiers, notamment XLSX, CSV et XML. Cette polyvalence permet aux développeurs de répondre facilement à différents besoins d'exportation de données.

Quels sont les défis techniques IronXL aide à surmonter lors de l'exportation de fichiers Excel ?

IronXL permet de surmonter les difficultés liées à la gestion de MemoryStream et à la configuration précise des en-têtes HTTP Content-Disposition. Ces fonctionnalités garantissent le bon traitement des fichiers Excel exportés par les navigateurs et préviennent la corruption des données.

Peut-on utiliser IronXL pour exporter des données depuis des contrôleurs MVC ?

Oui, IronXL permet d'exporter des données depuis des contrôleurs MVC. Il offre une méthode simple pour exporter des données au format Excel, ce qui en fait un choix pratique pour les applications web ASP.NET Core .

Comment IronXL améliore-t-il le processus de génération de fichiers Excel ?

IronXL améliore le processus en automatisant des tâches complexes telles que la gestion de MemoryStream et des en-têtes HTTP, permettant ainsi aux développeurs de se concentrer sur les fonctionnalités essentielles plutôt que sur les subtilités techniques.

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