Passer au contenu du pied de page
UTILISATION D'IRONXL

Alternative pour lire un fichier Excel à l'aide de StreamReader en C# - IronXL

De nombreux développeurs C# rencontrent un défi commun lorsqu'ils essaient de lire des fichiers de feuilles Excel : leur fidèle StreamReader, qui fonctionne parfaitement pour les fichiers texte, échoue mystérieusement avec les documents Excel. Si vous avez déjà tenté de lire un fichier Excel à l'aide de StreamReader en C# pour ne voir que des caractères brouillés ou des exceptions, vous n'êtes pas seul. Ce tutoriel explique pourquoi StreamReader ne peut pas traiter les fichiers Excel directement et démontre la solution appropriée en utilisant IronXL sans Interop Excel.

La confusion vient 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.

Alternative pour lire un fichier Excel en utilisant StreamReader en C# - IronXL : Image 1 - IronXL

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.

static void Main(string[] args)
{
    // This code will NOT work - demonstrates the problem
    using (StreamReader reader = new StreamReader("ProductData.xlsx"))
    {
        string content = reader.ReadLine(); // read data
        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(); // read data
        Console.WriteLine(content); // Outputs garbled binary data
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Lorsque vous exécuterez cet extrait de code du programme de classe, au lieu de voir les données de votre feuille de calcul, vous rencontrerez des données binaires inconnues, telles que " PK♥♦ " ou des caractères système 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.

Entrée d'exemple

Alternative pour lire un fichier Excel en utilisant StreamReader en C# - IronXL : Image 2 - Entrée Excel

Sortie

Alternative pour lire un fichier Excel en utilisant StreamReader en C# - IronXL : Image 3 - Sortie console

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.

Comment lire des fichiers Excel avec IronXL ?

IronXL fournit une solution directe pour la lecture de 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.

Alternative pour lire un fichier Excel en utilisant StreamReader en C# - IronXL : Image 4 - Cross Platform

Commencez par installer IronXL via le gestionnaire de packages NuGet :

Install-Package IronXL.Excel
Install-Package IronXL.Excel
SHELL

Alternative pour lire un fichier Excel en utilisant StreamReader en C# - IronXL : Image 5 - Installation

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}");
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$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.

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 téléchargements web, la récupération de fichiers à partir de bases de données ou le traitement de données provenant du stockage cloud. IronXL gère ces situations avec élégance :

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 new DataTable, return dt
    var dataTable = worksheet.ToDataTable(false);
    // Return 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 new DataTable, return dt
    var dataTable = worksheet.ToDataTable(false);
    // Return DataTable row count
    Console.WriteLine($"Loaded {dataTable.Rows.Count} data rows");
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

La méthode WorkBook.FromStream accepte n'importe quel type de flux, qu'il s'agisse d'un MemoryStream, d'un 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 de données de feuille de calcul en DataTable, qui s'intègre parfaitement aux bases de données et aux scénarios de liaison de données.

Sortie

Alternative pour lire un fichier Excel en utilisant StreamReader en C# - IronXL : Image 6 - Lire Excel à partir de la sortie MemoryStream

Quand utiliser l'émetteur d'objets pour lire des données ?

Dans les cas où ce code est utilisé dans le cadre de 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 unique inclut souvent des paramètres tels que objet sender 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.

Alternative pour lire un fichier Excel en utilisant StreamReader en C# - IronXL : Image 7 - Caractéristiques

Comment convertir des fichiers Excel en CSV et inversement ?

Bien que StreamReader puisse traiter les fichiers CSV, vous devez souvent convertir les formats Excel et CSV. IronXL simplifie cette conversion :

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");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$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.

Conclusion

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 élégante grâce à son API intuitive, sa prise en charge complète 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.

Alternative pour lire un fichier Excel en utilisant StreamReader en C# - IronXL : Image 8 - Licences

Prêt à commencer à travailler correctement avec les fichiers Excel ? Téléchargez l'essai gratuit d'IronXL et découvrez le traitement Excel sans tracas dans vos applications C#. Pour les déploiements en production, envisagez les options de licence IronXL qui répondent le mieux aux besoins de votre projet.

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