Passer au contenu du pied de page
UTILISATION D'IRONXL

Comment lire un fichier Excel avec StreamReader en C#

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 tenté de lire un fichier Excel à l'aide de StreamReader en C# et que vous n'avez constaté que des caractères illisibles 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.

Comment exporter un contrôle DataGridView vers Excel en VB.NET : Figure 1 - IronXL

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

StreamReader est conçu pour les fichiers 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 tableur, sont en réalité des structures binaires complexes ou des structures XML compressées 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 attend du texte brut et tente d'interpréter ces structures complexes comme des caractères, ce qui donne un résultat incompréhensible.

Entrée d'exemple

Comment exporter un DataGridView vers Excel en VB.NET : Figure 2 - Importation dans Excel

Sortie

Comment exporter un contrôle DataGridView vers Excel en VB.NET : Figure 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 offre une solution simple pour lire les fichiers Excel en C#. Contrairement à StreamReader, IronXL comprend la structure interne d'Excel et propose 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.

Comment lire un fichier Excel avec StreamReader en C# : Figure 4 - Multiplateforme

Commencez par installer IronXL via le gestionnaire de packages NuGet :

Install-Package IronXL.Excel

Comment lire un fichier Excel avec StreamReader en C# : Figure 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 tout 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

Comment lire un fichier Excel avec StreamReader en C# : Figure 6 - Lecture d'un fichier 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 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 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.

Comment lire un fichier Excel avec StreamReader en C# : Figure 7 - Fonctionnalités

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 :

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 complexe des fichiers Excel. Si StreamReader fonctionne parfaitement pour les fichiers CSV et autres formats 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.

Comment lire un fichier Excel avec StreamReader en C# : Figure 8 - Licence

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.

Questions Fréquemment Posées

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

StreamReader est conçu pour lire des fichiers texte et n'a pas la capacité de gérer le format binaire des fichiers Excel, ce qui entraîne des caractères illisibles ou des exceptions.

Qu'est-ce qu'IronXL?

IronXL est une bibliothèque C# qui permet aux développeurs de lire, écrire et manipuler des fichiers Excel sans avoir besoin d'Excel Interop, offrant une solution plus efficace et fiable.

Comment IronXL améliore-t-il la lecture des fichiers Excel en C# ?

IronXL simplifie le processus de lecture des fichiers Excel en fournissant des méthodes pour accéder aux données Excel sans besoin de code interop complexe ou de gestion des subtilités du format de fichier.

Puis-je utiliser IronXL pour lire les fichiers Excel sans Excel installé ?

Oui, IronXL n'exige pas que Microsoft Excel soit installé sur votre système, en faisant une solution autonome pour gérer les fichiers Excel en C#.

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

IronXL est plus rapide, élimine le besoin d'installation d'Excel et réduit le risque de problèmes de compatibilité de version fréquents avec Excel Interop.

IronXL est-il adapté pour les grands fichiers Excel ?

Oui, IronXL est optimisé pour la performance et peut gérer efficacement de grands fichiers Excel, le rendant adapté aux applications traitant des données étendues.

IronXL prend-il en charge la lecture des formats .xls et .xlsx ?

IronXL prend en charge à la fois les formats .xls et .xlsx, permettant aux développeurs de travailler sans problème avec divers types de fichiers Excel.

Comment puis-je commencer à utiliser IronXL dans mon projet C# ?

Vous pouvez commencer à utiliser IronXL en l'installant via le Gestionnaire de Paquets NuGet dans Visual Studio et en l'intégrant dans votre projet C# pour lire et manipuler des fichiers Excel.

Quels sont les cas d'utilisation courants pour IronXL ?

Les cas d'utilisation courants pour IronXL incluent l'extraction de données à partir de fichiers Excel, la génération de rapports, la manipulation de données et l'automatisation des tâches liées à Excel dans les applications C#.

IronXL peut-il être utilisé dans des applications web ?

Oui, IronXL peut être utilisé dans des applications de bureau et web, offrant flexibilité dans la mise en œuvre de capacités de traitement Excel dans vos projets.

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