Alternative zum Lesen von Excel-Dateien mit StreamReader in C# - IronXL
Viele C#-Entwickler stoßen auf ein bekanntes Problem beim Lesen von Excel-Tabellendateien: Ihr bewährtes StreamReader, das bei Textdateien einwandfrei funktioniert, versagt unerklärlicherweise bei Excel-Dokumenten. Wenn Sie versucht haben, eine Excel-Datei mit StreamReader in C# zu lesen und dabei nur verstümmelte Zeichen oder Ausnahmen erhalten haben, sind Sie nicht allein. Dieses Tutorial erklärt, warum StreamReader Excel-Dateien nicht direkt verarbeiten kann und demonstriert die richtige Lösung mit IronXL ohne Excel Interop.
Die Verwirrung entsteht oft dadurch, dass CSV-Dateien, die Excel öffnen kann, mit StreamReader einwandfrei funktionieren. Echte Excel-Dateien (XLSX, XLS) erfordern jedoch einen grundlegend anderen Ansatz. Dieses Verständnis wird Ihnen Stunden der Fehlersuche ersparen und Sie zum richtigen Werkzeug für die Aufgabe führen.

Warum kann StreamReader keine Excel-Dateien lesen?
StreamReader ist für einfache Textdateien konzipiert und liest Zeichendaten zeilenweise mit einer festgelegten Kodierung. Excel-Dateien sind trotz ihres tabellenartigen Aussehens eigentlich komplexe binäre oder ZIP-komprimierte XML-Strukturen, die StreamReader nicht interpretieren können.
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
}
}
Option Strict On
Imports System.IO
Module Program
Sub Main(args As String())
' This code will NOT work - demonstrates the problem
Using reader As New StreamReader("ProductData.xlsx")
Dim content As String = reader.ReadLine() ' read data
Console.WriteLine(content) ' Outputs garbled binary data
End Using
End Sub
End Module
Wenn Sie dieses Class Program Codebeispiel ausführen, sehen Sie statt Ihrer Tabellendaten Binärdaten unbekannten Ursprungs, wie z.B. "PK♥♦" oder ähnliche Systemzeichen. Dies geschieht, weil XLSX-Dateien ZIP-Archive sind, die mehrere XML-Dateien enthalten, während XLS-Dateien ein proprietäres binäres Format verwenden. StreamReader erwartet Klartext und versucht, diese komplexen Strukturen als Zeichen zu interpretieren, was zu einer sinnlosen Ausgabe führt.
Beispiel-Input

Ausgabe

Moderne Excel-Dateien (XLSX) enthalten mehrere Komponenten: Arbeitsblätter, Stile, gemeinsame Zeichenfolgen und Beziehungen, die alle zusammen verpackt sind. Diese Komplexität erfordert spezialisierte Bibliotheken, die die Excel-Dateistruktur verstehen, was uns zu IronXL führt.
Wie liest man Excel-Dateien mit IronXL?
IronXL bietet eine unkomplizierte Lösung für das Lesen von Excel-Dateien in C#. Im Gegensatz zu StreamReader versteht IronXL die interne Struktur von Excel und bietet intuitive Methoden für den Zugriff auf Ihre Daten. Die Bibliothek unterstützt Windows, Linux, macOS und Docker-Container, was sie ideal für moderne plattformübergreifende Anwendungen macht.

Zuerst installieren Sie IronXL über den NuGet-Paketmanager:
Install-Package IronXL.Excel

So lesen Sie eine Excel-Datei ordnungsgemäß:
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}");
}
Imports IronXL
' Load the Excel file
Dim workbook As WorkBook = WorkBook.Load("sample.xlsx")
Dim worksheet As WorkSheet = workbook.DefaultWorkSheet
' Read specific cell values
Dim cellValue As String = worksheet("A1").StringValue
Console.WriteLine($"Cell A1 contains: {cellValue}")
' Read a range of cells
For Each cell In worksheet("A1:C5")
Console.WriteLine($"{cell.AddressString}: {cell.Text}")
Next
Dieser Code lädt Ihre Excel-Datei erfolgreich und bietet sauberen Zugriff auf Zellwerte. Die Methode WorkBook.Load erkennt automatisch das Dateiformat (XLSX, XLS, XLSM, CSV) und übernimmt die gesamte komplexe Datenanalyse intern. Sie können auf Zellen mit vertrauter Excel-Notation wie "A1" oder Bereichen wie "A1:C5" zugreifen, was den Code intuitiv für jeden macht, der mit Excel vertraut ist.
Wie liest man Excel aus Memory Streams?
In realen Anwendungen müssen Excel-Dateien oft aus Streams und nicht von Datenträgern verarbeitet werden. Häufige Szenarien umfassen die Handhabung von Web-Uploads, das Abrufen von Dateien aus Datenbanken oder die Verarbeitung von Daten aus Cloud-Speichern. IronXL behandelt diese Situationen elegant:
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");
}
Imports IronXL
Imports System.IO
' Read Excel from a memory stream
Dim fileBytes As Byte() = File.ReadAllBytes("ProductData.xlsx")
Using stream As New MemoryStream(fileBytes)
Dim workbook As WorkBook = WorkBook.FromStream(stream)
Dim worksheet As WorkSheet = workbook.DefaultWorkSheet
' Process the data
Dim rowCount As Integer = worksheet.RowCount
Console.WriteLine($"The worksheet has {rowCount} rows")
' Read all data into a new DataTable, return dt
Dim dataTable = worksheet.ToDataTable(False)
' Return DataTable row count
Console.WriteLine($"Loaded {dataTable.Rows.Count} data rows")
End Using
Die Methode WorkBook.FromStream akzeptiert jeden Stream-Typ, egal ob es sich um einen MemoryStream, FileStream oder einen Netzwerk-Stream handelt. Diese Flexibilität ermöglicht es Ihnen, Excel-Dateien aus verschiedenen Quellen zu verarbeiten, ohne sie zuerst auf der Festplatte speichern zu müssen. Das Beispiel zeigt auch, wie Arbeitsblattdaten in eine DataTable konvertiert werden, die nahtlos mit Datenbanken und Datenbindungsszenarien integriert wird.
Ausgabe

Wann sollte man das Objekt sender verwenden, um Daten zu lesen?
In Fällen, in denen dieser Code innerhalb ereignisgesteuerter Programmierung verwendet wird (z. B. bei der Behandlung einer Datei-Upload-Schaltfläche in Windows Forms oder ASP.NET), enthält die Signatur der einen Methode häufig Parameter wie object sender und EventArgs e. Alt-Text zum Bild hinzufügen.

Wie konvertiert man zwischen Excel und CSV?
Obwohl StreamReader CSV-Dateien verarbeiten kann, ist es oft notwendig, zwischen Excel- und CSV-Formaten zu konvertieren. IronXL macht diese Konvertierung unkompliziert:
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");
Imports IronXL
' Load an Excel file and save as CSV
Dim workbook As WorkBook = WorkBook.Load("data.xlsx")
workbook.SaveAsCsv("output.csv")
' Load a CSV file and save as Excel
Dim csvWorkbook As WorkBook = WorkBook.LoadCSV("input.csv")
csvWorkbook.SaveAs("output.xlsx")
' Export specific worksheet to CSV
Dim worksheet As WorkSheet = workbook.WorkSheets(0)
worksheet.SaveAsCsv("worksheet1.csv")
Diese Konvertierungen erhalten Ihre Daten bei gleichzeitiger Änderung des Dateiformats. Beim Konvertieren von Excel in CSV flacht IronXL standardmäßig das erste Arbeitsblatt ab, Sie können jedoch festlegen, welches Arbeitsblatt exportiert werden soll. Das Konvertieren von CSV nach Excel erzeugt ein korrekt formatiertes Tabellenblatt, das Datentypen beibehält und zukünftige Formatierungen und Formeln ermöglicht.
Abschluss
Die Unfähigkeit von StreamReader, Excel-Dateien zu verarbeiten, beruht auf dem grundlegenden Unterschied zwischen einfachem Text und der komplexen Dateistruktur von Excel. Während StreamReader perfekt für CSV und andere Textformate funktioniert, benötigen echte Excel-Dateien eine spezialisierte Bibliothek wie IronXL , die die darin enthaltenen Binär- und XML-Strukturen versteht.
IronXL bietet eine elegante Lösung mit seiner intuitiven API, umfassender Formatunterstützung und nahtlosen Stream-Verarbeitungsfähigkeiten. Egal ob Sie Web-Anwendungen, Desktop-Software oder Cloud-Dienste entwickeln, IronXL verarbeitet Excel-Dateien zuverlässig auf allen Plattformen.

Bereit, um mit Excel-Dateien richtig zu arbeiten? Laden Sie die kostenlose Testversion von IronXL herunter und erleben Sie die problemlose Excel-Verarbeitung in Ihren C#-Anwendungen. Für den produktiven Einsatz sollten Sie IronXL-Lizenzierungsoptionen in Betracht ziehen, die den Anforderungen Ihres Projekts am besten entsprechen.
Häufig gestellte Fragen
Warum kann ich StreamReader nicht verwenden, um Excel-Dateien in C# zu lesen?
StreamReader ist für das Lesen von Textdateien konzipiert und unterstützt nicht das Binärformat von Excel-Dateien, was zu verstümmelten Zeichen oder Ausnahmen führt.
Welches ist der empfohlene Weg, um Excel-Dateien in C# zu lesen?
Der empfohlene Weg, Excel-Dateien in C# zu lesen, ist die Verwendung von IronXL, das Excel-Dateien direkt lesen und manipulieren kann, ohne dass Excel Interop erforderlich ist.
Was sind die Vorteile von IronXL gegenüber StreamReader für Excel-Dateien?
IronXL wurde speziell für das Excel-Dateiformat entwickelt und ermöglicht das genaue Lesen und Bearbeiten von Daten, wobei verschiedene Funktionen wie Formeln, Diagramme und Formatierungen unterstützt werden.
Benötige ich Excel Interop, um IronXL zu nutzen?
Nein, IronXL arbeitet unabhängig von Excel Interop und ermöglicht es Ihnen, mit Excel-Dateien zu arbeiten, ohne dass Excel auf Ihrem Rechner installiert sein muss.
Kann IronXL verschiedene Excel-Dateiformate verarbeiten?
Ja, IronXL unterstützt mehrere Excel-Dateiformate, einschließlich .xls, .xlsx und .csv, und bietet somit Flexibilität bei der Bearbeitung verschiedener Arten von Excel-Dokumenten.
Ist IronXL für große Excel-Dateien geeignet?
Ja, IronXL ist für Leistung optimiert und kann große Excel-Dateien effizient verarbeiten, was es für Anwendungen geeignet macht, die mit umfangreichen Daten arbeiten.
Wie schneidet IronXL im Vergleich zu anderen C#-Bibliotheken für die Excel-Bearbeitung ab?
IronXL bietet eine benutzerfreundliche API, umfassende Unterstützung für Excel-Funktionen und setzt keine Installation von Excel voraus, was es im Vergleich zu anderen Bibliotheken zu einer robusten Wahl macht.




