IRONSOFTWAREHOME
KORZYSTANIE Z IRONXL

Alternatywa dla odczytu pliku Excel za pomocą StreamReader w C# — IronXL

Curtis Chau
Curtis Chau
Updated: 5 stycznia 2026

Wielu programistów C# napotyka powszechny problem podczas próby odczytu plików arkuszy Excel: ich niezawodny StreamReader, który działa perfekcyjnie dla plików tekstowych, tajemniczo zawodzi przy dokumentach Excel. Jeśli próbowałeś odczytać plik Excel przy użyciu StreamReader w C# i zobaczyłeś nieczytelne znaki lub wyjątki, nie jesteś odosobniony. Ten samouczek wyjaśnia, dlaczego StreamReader nie może obsługiwać plików Excel bezpośrednio i pokazuje właściwe rozwiązanie za pomocą IronXL bez Excel Interop.

Zamieszanie często wynika z faktu, że pliki CSV, które Excel potrafi otworzyć, działają poprawnie z StreamReader. Jednak prawdziwe pliki Excel (XLSX, XLS) wymagają zupełnie innego podejścia. Zrozumienie tej różnicy pozwoli Ci zaoszczędzić wiele godzin na debugowaniu i doprowadzi Cię do wyboru odpowiedniego narzędzia do danego zadania.

Alternatywa dla odczytu pliku Excel za pomocą StreamReader w C# - IronXL: Obraz 1 - IronXL

Dlaczego StreamReader nie może odczytywać plików Excel?

StreamReader jest zaprojektowany dla plików tekstowych, odczytując dane znakowe linia po linii, używając określonego kodowania. Pliki Excel, pomimo wyglądu arkusza kalkulacyjnego, są w rzeczywistości złożonymi strukturami binarnymi lub skompresowanymi ZIP strukturami XML, których StreamReader nie może zinterpretować.

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
    }
}

Po uruchomieniu tego fragmentu kodu klasy zamiast danych z arkusza kalkulacyjnego zobaczysz nieznane dane binarne, takie jak "PK♥♦" lub podobne znaki systemowe. Dzieje się tak, ponieważ pliki XLSX są archiwami ZIP zawierającymi wiele plików XML, podczas gdy pliki XLS wykorzystują zastrzeżony format binarny. StreamReader oczekuje tekstu zwykłego i próbuje zinterpretować te złożone struktury jako znaki, co prowadzi do bezsensownego wyniku.

Przykładowe dane wejściowe

Alternatywa dla odczytu pliku Excel za pomocą StreamReader w C# - IronXL: Obraz 2 - Excel Input

Wynik

Alternatywa dla odczytu pliku Excel za pomocą StreamReader w C# - IronXL: Obraz 3 - Console Output

Nowoczesne pliki Excel (XLSX) zawierają wiele elementów: arkusze, style, wspólne ciągi znaków i relacje, a wszystko to w jednym pakiecie. Ta złożoność wymaga specjalistycznych bibliotek, które rozumieją strukturę plików Excel, co prowadzi nas do IronXL.

Jak odczytywać pliki Excel za pomocą IronXL?

IronXL zapewnia proste rozwiązanie do odczytu plików Excel w języku C#. W przeciwieństwie do StreamReader, IronXL rozumie wewnętrzną strukturę Excela i oferuje intuicyjne metody dostępu do danych. Biblioteka obsługuje systemy Windows, Linux, macOS oraz kontenery Docker, dzięki czemu idealnie nadaje się do nowoczesnych, wielopłatformowych aplikacji.

Alternatywa dla odczytu pliku Excel za pomocą StreamReader w C# - IronXL: Obraz 4 - Cross Platform

Najpierw zainstaluj IronXL za pomocą menedżera pakietów NuGet:

PM > Install-Package IronXL.Excel

Alternatywa dla odczytu pliku Excel za pomocą StreamReader w C# - IronXL: Obraz 5 - Installation

Oto jak poprawnie odczytać plik 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}");
}

Ten kod z powodzeniem ładuje plik Excel i zapewnia łatwy dostęp do wartości komórek. Metoda WorkBook.Load automatycznie wykrywa format pliku (XLSX, XLS, XLSM, CSV) i obsługuje całą złożoną analizę wewnętrznie. Dostęp do komórek można uzyskać za pomocą znanej notacji programu Excel, takiej jak "A1", lub zakresów, takich jak "A1:C5", dzięki czemu kod jest intuicyjny dla każdego, kto zna program Excel.

Jak odczytywać dane z Excela ze strumieni pamięci?

W rzeczywistych zastosowaniach często konieczne jest przetwarzanie plików Excel z strumieni, a nie z dysku. Typowe scenariusze obejmują obsługę przesyłania plików przez Internet, pobieranie plików z baz danych lub przetwarzanie danych z pamięci masowej w chmurze. IronXL elegancko radzi sobie z takimi sytuacjami:

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");
}

Metoda WorkBook.FromStream akceptuje dowolny typ strumienia, niezależnie od tego czy jest to MemoryStream, FileStream, czy strumień sieciowy. Ta elastyczność pozwala przetwarzać pliki Excel z różnych źródeł bez konieczności ich uprzedniego zapisywania na dysku. Przykład pokazuje również konwersję danych z arkusza do tabeli DataTable, która płynnie integruje się z bazami danych i scenariuszami powiązania danych.

Wynik

Alternatywa dla odczytu pliku Excel za pomocą StreamReader w C# - IronXL: Obraz 6 - Read Excel from MemoryStream Output

Kiedy należy używać obiektu sender do odczytu danych?

W przypadkach, gdy ten kod jest używany w programowaniu zdarzeniowym (np. obsługując przycisk przesyłania pliku w Windows Forms lub ASP.NET), sygnatura metody często zawiera parametr taki jak object sender i EventArgs e. Ten kontekst zapewnia, że logika przetwarzania w Excelu prawidłowo łączy się z wydarzeniami interfejsu użytkownika lub usługi.

Alternatywa dla odczytu pliku Excel za pomocą StreamReader w C# - IronXL: Obraz 7 - Features

Jak konwertować pliki między formatami Excel i CSV?

Podczas gdy StreamReader potrafi obsłużyć pliki CSV, często istnieje potrzeba konwersji między formatami Excel a CSV. IronXL sprawia, że konwersja ta jest prosta:

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");

Te konwersje pozwalają zachować dane przy zmianie formatu pliku. Podczas konwersji pliku Excel do formatu CSV program IronXL domyślnie spłaszcza pierwszy arkusz, ale można określić, który arkusz ma zostać wyeksportowany. Konwersja z formatu CSV do Excela tworzy poprawnie sformatowany arkusz kalkulacyjny, który zachowuje typy danych i umożliwia przyszłe formatowanie oraz dodawanie formuł.

Wnioski

Niezdolność StreamReader do przetwarzania plików Excel wynika z fundamentalnej różnicy między tekstem zwykłym a złożoną strukturą pliku Excel. Podczas gdy StreamReader działa perfekcyjnie dla plików CSV i innych formatów tekstowych, prawdziwe pliki Excel wymagają specjalistycznej biblioteki, takiej jak IronXL, która rozumie wewnętrzne struktury binarne i XML.

IronXL zapewnia eleganckie rozwiązanie dzięki intuicyjnemu API, obsłudze wielu formatów oraz płynnym możliwościom przetwarzania strumieniowego. Niezależnie od tego, czy tworzysz aplikacje internetowe, oprogramowanie desktopowe czy usługi w chmurze, IronXL niezawodnie obsługuje pliki Excel na wszystkich platformach.

Gotowy, aby zacząć prawidłowo pracować z plikami Excel? Pobierz bezpłatną wersję próbną IronXL i ciesz się bezproblemowym przetwarzaniem plików Excel w swoich aplikacjach C#. W przypadku wdrożeń produkcyjnych warto rozważyć opcje licencji IronXL, które najlepiej odpowiadają potrzebom projektu.

Curtis Chau
Autor tekstów technicznych

Curtis Chau posiada tytuł licencjata z informatyki (Uniwersytet Carleton) i specjalizuje się w front-endowym rozwoju, z ekspertką w Node.js, TypeScript, JavaScript i React. Pasjonuje się tworzeniem intuicyjnych i estetycznie przyjemnych interfejsów użytkownika, Curtis cieszy się pracą z nowoczesnymi frameworkami i tworzeniem dobrze zorganizowanych, atrakcyjnych wizualnie podręczników.

...
Czytaj więcej

Powiązane artykuły

Key in blue circle

Uzyskaj natychmiast swój darmowy 30-dniowy Klucz Testowy.

Your trial license will be sent to your email address

Brak ograniczeń. 100% dostępności. Bez karty kredytowej.

bullet_checkedNie wymaga karty kredytowej ani tworzenia kontaBrak ograniczeń. 100% dostępności. Bez karty kredytowej.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Zarezerwuj swoje darmowe Demo na żywo
Booking Badge

Zaufane przez miliony inżynierów na całym świecie

Logotypy klientów Iron Software
Otrzymaj swoje Konsultacja Bez Zobowiązań
Wypełnij poniższy formularz lub wyślij e-mail na sales@ironsoftware.com
Twoje dane zawsze będą utrzymywane w tajemnicy.
Zaufane przez miliony inżynierów na całym świecie
Logotypy klientów Iron Software
Otrzymaj swój darmowy Klucz Próbny na 30 dni natychmiast.
Nie wymaga karty kredytowej ani tworzenia konta