Passer au contenu du pied de page
UTILISATION D'IRONXL

Comment importer, lire et manipuler des données Excel en C#

StreamReader ne peut pas lire les fichiers Excel car les formats XLSX/XLS sont des structures binaires complexes ou des structures XML compressées, et non du texte brut. Utilisez plutôt la bibliothèque IronXL , qui fournit WorkBook.Load() pour la lecture de fichiers et WorkBook FromStream ) pour le traitement des flux en mémoire sans dépendance à Excel Interop.

De nombreux développeurs C# rencontrent un problème commun lorsqu'ils tentent de lire des fichiers Excel : leur fidèle StreamReader , qui fonctionne parfaitement pour les fichiers texte, échoue mystérieusement avec les documents Excel . Si vous avez essayé de lire des fichiers Excel à l'aide StreamReader en C# et que vous n'avez vu que des caractères brouillés ou des exceptions, vous n'êtes pas seul. Ce tutoriel explique pourquoi StreamReader ne peut pas gérer directement les fichiers Excel et présente la solution appropriée utilisant IronXL sans interopérabilité Excel .

La confusion provient souvent du fait que les fichiers CSV , qu'Excel peut ouvrir, fonctionnent parfaitement avec StreamReader . Cependant, les véritables fichiers Excel (XLSX, XLS) nécessitent une approche fondamentalement différente. Comprendre cette distinction vous épargnera des heures de débogage et vous guidera vers l'outil adapté à la tâche. Pour les ingénieurs DevOps déployant des applications dans des conteneurs Docker ou des environnements Kubernetes , cela devient particulièrement critique car les dépendances natives peuvent compliquer la conteneurisation.

La page d'accueil d'IronXL pour .NET présente un exemple de code C# permettant de lire des fichiers Excel sans interopérabilité avec Microsoft Office, et met en avant les fonctionnalités de la bibliothèque ainsi que les statistiques de téléchargement.

Pourquoi StreamReader ne peut-il pas lire les fichiers Excel ?

StreamReader est conçu pour les fichiers de texte brut, lisant les données de caractères ligne par ligne en utilisant un encodage spécifié. Les fichiers Excel, malgré leur apparence de feuille de calcul, sont en réalité des structures XML complexes, binaires ou compressées en ZIP, que StreamReader ne peut pas interpréter. Les fichiers XLSX modernes suivent la norme Office Open XML, tandis que les fichiers XLS plus anciens utilisent un format binaire propriétaire.

static void Main(string[] args)
{
 // This code will NOT work - demonstrates the problem
 using (StreamReader reader = new StreamReader("ProductData.xlsx"))
 {
    string content = reader.ReadLine(); // Attempts to read Excel as text
    Console.WriteLine(content); // Outputs garbled binary data
 }
}
static void Main(string[] args)
{
 // This code will NOT work - demonstrates the problem
 using (StreamReader reader = new StreamReader("ProductData.xlsx"))
 {
    string content = reader.ReadLine(); // Attempts to read Excel as text
    Console.WriteLine(content); // Outputs garbled binary data
 }
}
$vbLabelText   $csharpLabel

Lorsque vous exécuterez cet extrait de code, au lieu de voir les données de votre feuille de calcul, vous obtiendrez des données binaires, telles que " PK♥♦ " ou des caractères similaires. Cela s'explique par le fait que les fichiers XLSX sont des archives ZIP contenant plusieurs fichiers XML, tandis que les fichiers XLS utilisent un format binaire propriétaire. StreamReader s'attend à du texte brut et tente d'interpréter ces structures complexes comme des caractères, ce qui produit un résultat dénué de sens. Pour les applications conteneurisées, tenter d'utiliser les bibliothèques Excel natives ou l'interopérabilité COM nécessiterait d'installer Microsoft Office dans votre conteneur, ce qui augmenterait considérablement la taille et la complexité de l'image.

Que se passe-t-il lorsque StreamReader tente de traiter des fichiers Excel ?

L'exemple suivant illustre un fichier Excel typique contenant des données produit que nous souhaitons traiter. Remarquez comme les données structurées de la feuille de calcul apparaissent claires et organisées lorsqu'elles sont visualisées dans Excel :

Feuille de calcul Excel présentant un tableau de données produits avec des colonnes pour les noms de produits (ordinateur portable, souris, clavier, moniteur, casque audio), les prix et les valeurs VRAI/FAUX dans les colonnes A à D.

Pourquoi le résultat affiche-t-il des caractères illisibles ?

Lorsque StreamReader tente de traiter ce fichier Excel, la sortie de la console révèle le problème sous-jacent. Au lieu de données lisibles, vous voyez un contenu binaire car la structure du fichier ne peut pas être interprétée comme du texte :

La console de débogage de Visual Studio affiche l'exécution réussie du programme (code de sortie 0) et vous invite à appuyer sur une touche pour fermer la fenêtre.

Les fichiers Excel modernes (XLSX) contiennent plusieurs composants : feuilles de calcul, styles, chaînes partagées et relations, le tout regroupé. Cette complexité nécessite des bibliothèques spécialisées qui comprennent la structure des fichiers Excel , ce qui nous amène à IronXL. La bibliothèque gère toutes ces complexités en interne tout en fournissant une API simple, ce qui la rend idéale pour les pipelines de déploiement automatisés où l'intervention manuelle est impossible.

Comment lire des fichiers Excel avec IronXL ?

IronXL offre une solution simple pour lire les fichiers Excel en C#. Contrairement à StreamReader, IronXL.Excel comprend la structure interne d'Excel et fournit des méthodes intuitives pour accéder à vos données. La bibliothèque prend en charge Windows, Linux, macOS et les conteneurs Docker , ce qui la rend idéale pour les applications modernes et multiplateformes. Pour les équipes DevOps , l'architecture sans dépendance d'IronXL signifie qu'il n'y a pas de bibliothèques natives ni de composants COM à gérer lors du déploiement.

Diagramme de compatibilité multiplateforme illustrant la compatibilité .NET avec différentes versions, systèmes d'exploitation, environnements de développement et plateformes cloud, notamment Windows, Linux, macOS, Docker, Azure et AWS.

Commencez par installer IronXL via le gestionnaire de packages NuGet :

Install-Package IronXL.Excel

! Sortie du terminal indiquant l'installation réussie du package IronXL.Excel et de ses dépendances via la console du gestionnaire de packages dans Visual Studio

Voici comment lire correctement un fichier Excel :

using IronXL;
// Load the Excel file
WorkBook workbook = WorkBook.Load("sample.xlsx");
WorkSheet worksheet = workbook.DefaultWorkSheet;
// Read specific cell values
string cellValue = worksheet["A1"].StringValue;
Console.WriteLine($"Cell A1 contains: {cellValue}");
// Read a range of cells
foreach (var cell in worksheet["A1:C5"])
{
    Console.WriteLine($"{cell.AddressString}: {cell.Text}");
}
using IronXL;
// Load the Excel file
WorkBook workbook = WorkBook.Load("sample.xlsx");
WorkSheet worksheet = workbook.DefaultWorkSheet;
// Read specific cell values
string cellValue = worksheet["A1"].StringValue;
Console.WriteLine($"Cell A1 contains: {cellValue}");
// Read a range of cells
foreach (var cell in worksheet["A1:C5"])
{
    Console.WriteLine($"{cell.AddressString}: {cell.Text}");
}
$vbLabelText   $csharpLabel

Ce code charge correctement votre fichier Excel et permet un accès direct aux valeurs des cellules . La méthode WorkBook.Load détecte automatiquement le format du fichier ( XLSX , XLS , XLSM, CSV ) et gère en interne toute l'analyse complexe. Vous pouvez accéder aux cellules en utilisant la notation Excel habituelle, comme " A1 ", ou aux plages, comme " A1:C5 ", ce qui rend le code intuitif pour toute personne familière avec Excel.

Pour les déploiements conteneurisés, vous pouvez facilement inclure des points de terminaison de contrôle d'intégrité qui vérifient les capacités de traitement Excel :

// Health check endpoint for containerized apps
public async Task<IActionResult> HealthCheck()
{
    try
    {
        // Test Excel functionality
        using var workbook = WorkBook.Create(ExcelFileFormat.XLSX);
        var sheet = workbook.CreateWorkSheet("HealthCheck");
        sheet["A1"].Value = DateTime.UtcNow;

        // Convert to byte array for validation
        var bytes = workbook.ToByteArray();
        return Ok(new { 
            status = "healthy", 
            excelSupport = true,
            timestamp = DateTime.UtcNow 
        });
    }
    catch (Exception ex)
    {
        return StatusCode(503, new { 
            status = "unhealthy", 
            error = ex.Message 
        });
    }
}
// Health check endpoint for containerized apps
public async Task<IActionResult> HealthCheck()
{
    try
    {
        // Test Excel functionality
        using var workbook = WorkBook.Create(ExcelFileFormat.XLSX);
        var sheet = workbook.CreateWorkSheet("HealthCheck");
        sheet["A1"].Value = DateTime.UtcNow;

        // Convert to byte array for validation
        var bytes = workbook.ToByteArray();
        return Ok(new { 
            status = "healthy", 
            excelSupport = true,
            timestamp = DateTime.UtcNow 
        });
    }
    catch (Exception ex)
    {
        return StatusCode(503, new { 
            status = "unhealthy", 
            error = ex.Message 
        });
    }
}
$vbLabelText   $csharpLabel

Comment lire des fichiers Excel à partir de flux de mémoire ?

Dans le monde réel, les applications ont souvent besoin de traiter des fichiers Excel à partir de flux plutôt que de fichiers sur disque. Les scénarios courants incluent la gestion des chargements web, la récupération de fichiers à partir de bases de données ou le traitement de données provenant de stockages cloud tels que AWS S3 ou Azure Blob Storage . IronXL gère ces situations sans problème :

using IronXL;
using System.IO;
// Read Excel from a memory stream
byte[] fileBytes = File.ReadAllBytes("ProductData.xlsx");
using (MemoryStream stream = new MemoryStream(fileBytes))
{
    WorkBook workbook = WorkBook.FromStream(stream);
    WorkSheet worksheet = workbook.DefaultWorkSheet;
    // Process the data
    int rowCount = worksheet.RowCount;
    Console.WriteLine($"The worksheet has {rowCount} rows");
    // Read all data into a DataTable
    var dataTable = worksheet.ToDataTable(false);
    // Display DataTable row count 
    Console.WriteLine($"Loaded {dataTable.Rows.Count} data rows");
}
using IronXL;
using System.IO;
// Read Excel from a memory stream
byte[] fileBytes = File.ReadAllBytes("ProductData.xlsx");
using (MemoryStream stream = new MemoryStream(fileBytes))
{
    WorkBook workbook = WorkBook.FromStream(stream);
    WorkSheet worksheet = workbook.DefaultWorkSheet;
    // Process the data
    int rowCount = worksheet.RowCount;
    Console.WriteLine($"The worksheet has {rowCount} rows");
    // Read all data into a DataTable
    var dataTable = worksheet.ToDataTable(false);
    // Display DataTable row count 
    Console.WriteLine($"Loaded {dataTable.Rows.Count} data rows");
}
$vbLabelText   $csharpLabel

La méthode WorkBook accepte tout type de flux, qu'il s'agisse FromStream un MemoryStream , FileStream ou d'un flux réseau. Cette flexibilité vous permet de traiter des fichiers Excel provenant de diverses sources sans avoir à les enregistrer au préalable sur le disque. L'exemple illustre également la conversion des données d'une feuille de calcul en un objet DataTable , qui s'intègre parfaitement aux bases de données et aux scénarios de liaison de données. Pour les architectures de microservices , cette approche basée sur les flux minimise les E/S disque et améliore les performances.

Quels résultats produit le traitement des flux de mémoire ?

! La console de débogage de Visual Studio affiche la sortie de la lecture des données Excel, indiquant " La feuille de calcul comporte 5 lignes " et " 5 lignes de données chargées ".

Quand dois-je utiliser l'expéditeur d'objets dans les scénarios de lecture Excel ?

Dans les cas où ce code est utilisé dans la programmation événementielle (par exemple, la gestion d'un bouton de téléchargement de fichier dans Windows Forms ou ASP.NET ), la signature de la méthode inclut souvent des paramètres tels que l'objet expéditeur et EventArgs e. Ce contexte garantit que la logique de traitement Excel s'intègre correctement aux événements d'interface utilisateur ou de service. Pour les API conteneurisées, vous pouvez traiter les chargements directement à partir des requêtes HTTP :

[HttpPost("upload")]
public async Task<IActionResult> ProcessExcelUpload(IFormFile file)
{
    if (file == null || file.Length == 0)
        return BadRequest("No file uploaded");

    using var stream = new MemoryStream();
    await file.CopyToAsync(stream);
    stream.Position = 0;

    var workbook = WorkBook.FromStream(stream);
    var worksheet = workbook.DefaultWorkSheet;

    // Process and return results
    var data = worksheet.ToDataSet();
    return Ok(new { 
        sheets = workbook.WorkSheets.Count,
        rows = worksheet.RowCount,
        processed = DateTime.UtcNow
    });
}
[HttpPost("upload")]
public async Task<IActionResult> ProcessExcelUpload(IFormFile file)
{
    if (file == null || file.Length == 0)
        return BadRequest("No file uploaded");

    using var stream = new MemoryStream();
    await file.CopyToAsync(stream);
    stream.Position = 0;

    var workbook = WorkBook.FromStream(stream);
    var worksheet = workbook.DefaultWorkSheet;

    // Process and return results
    var data = worksheet.ToDataSet();
    return Ok(new { 
        sheets = workbook.WorkSheets.Count,
        rows = worksheet.RowCount,
        processed = DateTime.UtcNow
    });
}
$vbLabelText   $csharpLabel

Présentation des fonctionnalités d'une bibliothèque de manipulation Excel pour C# présentant six catégories principales : Créer, Enregistrer et Exporter, Modifier les classeurs, Travailler avec les données, Sécuriser les classeurs, et une liste détaillée des fonctionnalités sous chaque catégorie.

Comment convertir des fichiers Excel en CSV et inversement ?

Bien que StreamReader puisse gérer les fichiers CSV, il est souvent nécessaire de convertir entre les formats Excel et CSV . IronXL simplifie cette conversion, ce qui est particulièrement utile pour les pipelines ETL et les scénarios d'intégration de données courants dans les flux de travail DevOps :

using IronXL;
// Load an Excel file and save as CSV
WorkBook workbook = WorkBook.Load("data.xlsx");
workbook.SaveAsCsv("output.csv");
// Load a CSV file and save as Excel
WorkBook csvWorkbook = WorkBook.LoadCSV("input.csv");
csvWorkbook.SaveAs("output.xlsx");
// Export specific worksheet to CSV
WorkSheet worksheet = workbook.WorkSheets[0];
worksheet.SaveAsCsv("worksheet1.csv");
using IronXL;
// Load an Excel file and save as CSV
WorkBook workbook = WorkBook.Load("data.xlsx");
workbook.SaveAsCsv("output.csv");
// Load a CSV file and save as Excel
WorkBook csvWorkbook = WorkBook.LoadCSV("input.csv");
csvWorkbook.SaveAs("output.xlsx");
// Export specific worksheet to CSV
WorkSheet worksheet = workbook.WorkSheets[0];
worksheet.SaveAsCsv("worksheet1.csv");
$vbLabelText   $csharpLabel

Ces conversions préservent vos données tout en modifiant le format du fichier. Lors de la conversion d'Excel en CSV , IronXL aplatit par défaut la première feuille de calcul, mais vous pouvez spécifier la feuille de calcul à exporter. La conversion d'un fichier CSV en Excel crée une feuille de calcul correctement formatée qui préserve les types de données et permet des ajouts ultérieurs de formatage et de formules .

Pour les pipelines de données automatisés, vous pouvez également exporter aux formats JSON ou XML :

// Export Excel to multiple formats for data pipelines
var workbook = WorkBook.Load("report.xlsx");

// Export to JSON for API responses
string jsonData = workbook.ToJson();

// Export to HTML for web display
workbook.SaveAsHtml("report.html");

// Export to XML for integration systems
workbook.SaveAsXml("report.xml");

// Export specific range to DataTable for database insertion
var dataTable = workbook.DefaultWorkSheet["A1:D10"].ToDataTable();
// Export Excel to multiple formats for data pipelines
var workbook = WorkBook.Load("report.xlsx");

// Export to JSON for API responses
string jsonData = workbook.ToJson();

// Export to HTML for web display
workbook.SaveAsHtml("report.html");

// Export to XML for integration systems
workbook.SaveAsXml("report.xml");

// Export specific range to DataTable for database insertion
var dataTable = workbook.DefaultWorkSheet["A1:D10"].ToDataTable();
$vbLabelText   $csharpLabel

Bonnes pratiques de déploiement de conteneurs

Pour les ingénieurs DevOps déployant des applications de traitement Excel, IronXL offre plusieurs avantages. Voici un Dockerfile prêt pour la production et optimisé pour le traitement Excel :

FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

# Install any required system fonts for Excel rendering
RUN apt-get update && apt-get install -y \
    fontconfig \
    libfreetype6 \
    && rm -rf /var/lib/apt/lists/*

FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
WORKDIR /src
COPY ["YourApp.csproj", "."]
RUN dotnet restore
COPY . .
RUN dotnet build -c Release -o /app/build

FROM build AS publish
RUN dotnet publish -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .

# Set environment variables for IronXL
ENV IRONXL_LICENSE_KEY=${IRONXL_LICENSE_KEY}
ENV DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=false

ENTRYPOINT ["dotnet", "YourApp.dll"]

Ce Dockerfile garantit le bon fonctionnement de votre application de traitement Excel dans des conteneurs avec un minimum de dépendances. La gestion des licences s'effectue via des variables d'environnement, ce qui facilite leur administration dans différents environnements de déploiement.

Quelles sont les prochaines étapes pour le traitement Excel en C# ?

l'incapacité de StreamReader à traiter les fichiers Excel provient de la différence fondamentale entre le texte brut et la structure de fichier complexe d'Excel. Alors que StreamReader fonctionne parfaitement pour les formats CSV et autres formats de texte, les véritables fichiers Excel nécessitent une bibliothèque spécialisée comme IronXL qui comprend les structures binaires et XML qu'ils contiennent.

IronXL offre une solution complète grâce à son API intuitive, sa prise en charge étendue des formats et ses capacités de traitement de flux transparentes. Que vous développiez des applications web , des logiciels de bureau ou des services cloud, IronXL gère les fichiers Excel de manière fiable sur toutes les plateformes. La prise en charge par cette bibliothèque de la mise en forme conditionnelle , des graphiques , des formules et des fonctionnalités avancées d'Excel en fait une solution complète pour les applications d'entreprise.

Pour les équipes DevOps , l'architecture d'IronXL, compatible avec les conteneurs, ses dépendances système minimales et ses solides performances en font un choix idéal pour les applications cloud-native modernes. La bibliothèque prend en charge la mise à l'échelle horizontale , fonctionne de manière transparente dans les pods Kubernetes et s'intègre bien aux pipelines CI/CD.

La page de licence IronXL présente quatre niveaux de prix (Lite, Plus, Professionnel et Illimité) avec une option permettant de basculer entre IronXL et Iron Suite, et affiche les prix des licences perpétuelles allant de 749 $ à 3 999 $.

Prêt à commencer à travailler correctement avec les fichiers Excel ? Téléchargez la version d'essai gratuite d'IronXL qui correspond le mieux aux besoins de votre projet. La bibliothèque propose des options de licence flexibles, notamment pour les déploiements de développement, de préproduction et de production, avec des options pour les environnements conteneurisés et les applications natives du cloud.

Questions Fréquemment Posées

Pourquoi StreamReader ne peut-il pas gérer les fichiers Excel directement en C#?

StreamReader est conçu pour les fichiers texte et ne prend pas en charge le format binaire des fichiers Excel, c'est pourquoi vous pouvez rencontrer des caractères illisibles ou des exceptions lorsque vous l'utilisez pour lire des documents Excel. À la place, il est recommandé d'utiliser une bibliothèque comme IronXL pour un traitement approprié des fichiers Excel.

Quelle est la méthode recommandée pour importer des données Excel en C#?

La méthode recommandée pour importer des données Excel en C# est d'utiliser IronXL. Cela permet aux développeurs de lire et manipuler des fichiers Excel sans avoir besoin d'Excel Interop, offrant une solution plus simple et plus efficace.

Puis-je manipuler des fichiers Excel en C# sans utiliser Excel Interop?

Oui, vous pouvez manipuler des fichiers Excel en C# sans Excel Interop en utilisant IronXL. Cela offre un moyen facile de travailler avec des documents Excel directement dans votre application C#.

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

IronXL offre plusieurs avantages, notamment la capacité de lire et écrire des fichiers Excel sans avoir besoin de Microsoft Excel, la prise en charge de divers formats Excel, et une API puissante qui simplifie les tâches de manipulation des données.

IronXL prend-il en charge la lecture des fichiers Excel avec des types de données complexes?

Oui, IronXL prend en charge la lecture des fichiers Excel avec des types de données complexes, vous permettant de gérer efficacement des structures de données variées au sein de vos applications C#.

Comment IronXL améliore-t-il le processus de travail avec les fichiers Excel en C#?

IronXL simplifie le processus de travail avec les fichiers Excel en fournissant une interface facile à utiliser qui élimine le besoin d'Excel Interop, réduit la complexité du code et améliore les performances.

Est-il possible de lire et écrire des fichiers Excel dans différents formats en utilisant IronXL?

Oui, IronXL prend en charge plusieurs formats de fichiers Excel tels que XLSX, XLS, CSV, et plus, vous permettant de lire et écrire des fichiers dans divers formats sans effort.

IronXL peut-il gérer de grands fichiers Excel efficacement?

IronXL est conçu pour gérer efficacement les fichiers Excel volumineux, offrant des performances robustes et minimisant l'utilisation de la mémoire lors des opérations sur les fichiers.

Qu'est-ce qui fait de IronXL un choix approprié pour les développeurs C# travaillant avec des fichiers Excel?

IronXL est un choix approprié pour les développeurs C# car il offre un ensemble complet de fonctionnalités pour lire, écrire et manipuler des fichiers Excel avec facilité, sans nécessiter Microsoft Excel ou des dépendances interop complexes.

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