IRONSOFTWAREHOME
KORZYSTANIE Z IRONXL

Jak czytać pliki Excel w C# zamiast używać StreamReader

Curtis Chau
Curtis Chau
Updated: 28 czerwca 2026

Wielu programistów C# napotyka frustrujące wyzwanie podczas pracy z plikami Excel: klasa StreamReader, która niezawodnie obsługuje pliki tekstowe, całkowicie zawodzi w przypadku dokumentów Excel. Jeśli próbowałeś odczytać plik Excel za pomocą StreamReader w C#, a zobaczyłeś dziwne znaki, szum binarny lub nieoczekiwane wyjątki, nie jesteś sam. Ten przewodnik wyjaśnia, dlaczego StreamReader nie może obsługiwać plików Excel i pokazuje, jak prawidłowo rozwiązać problem przy użyciu IronXL -- dedykowanej biblioteki Excel dla .NET, która nie wymaga instalacji Excela.

Zamieszanie często pojawia się, ponieważ pliki CSV -- które Excel może otwierać i zapisywać -- działają poprawnie z StreamReader. Prawdziwe pliki Excel (XLSX, XLS, XLSM) wymagają zupełnie innego podejścia. Zrozumienie tej różnicy pozwoli Ci zaoszczędzić wiele godzin na debugowaniu i skieruje Cię do odpowiedniego narzędzia do danego zadania.

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

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

StreamReader jest czytnikiem opartym na tekście. Odczytuje dane znakowe wiersz po wierszu przy użyciu określonego kodowania (UTF-8, ASCII itp.) i nie rozpoznaje struktur binarnych ani skompresowanych archiwów. Oficjalna dokumentacja .NET StreamReader potwierdza, że klasa ta jest przeznaczona wyłącznie do tekstu zakodowanego znakowo. Pliki Excel, mimo że wyglądają jak proste arkusze kalkulacyjne, są w rzeczywistości złożonymi strukturami binarnymi lub zip-kompresowanymi strukturami XML, których StreamReader nie jest w stanie zinterpretować.

Gdy otwierasz plik XLSX za pomocą StreamReader, próbujesz w zasadzie odczytać archiwum ZIP jako zwykły tekst. Wynikiem jest strumień szumu binarnego, a nie dane z arkusza kalkulacyjnego.

// This code will NOT work -- demonstrates the problem
using StreamReader reader = new StreamReader("ProductData.xlsx");
string content = reader.ReadLine();
Console.WriteLine(content); // Outputs garbled binary data like "PK♥♦"

Gdy uruchomisz ten fragment, zamiast zobaczyć wiersze arkusza kalkulacyjnego, napotkasz znaki binarne takie jak PK♥♦ lub podobny szum. Dzieje się tak, ponieważ:

  • Pliki XLSX to archiwa ZIP zawierające wiele plików XML: arkusze, style, wspólne ciągi znaków, relacje. Dokumentacja Open XML SDK zawiera szczegółowy opis tej struktury.
  • Pliki XLS wykorzystują zastrzeżony format binarny (BIFF — Binary Interchange Format pliku)
  • StreamReader stosuje kodowanie znaków do dowolnych bajtów, które odczytuje, generując bezsensowny wynik dla obu formatów

Przykładowe dane wejściowe

Alternatywa dla odczytu plików Excel za pomocą StreamReader w C# - IronXL: Obraz 2 - Wprowadzenie Excel

Zniekształcony wynik podczas korzystania z StreamReader

Alternatywa dla odczytu plików Excel za pomocą StreamReader w C# - IronXL: Obraz 3 - Wydruk konsoli

Dlaczego CSV działa, a XLSX nie

CSV (Comma-Separated Values) to format tekstu zwykłego. Każdy wiersz to linia tekstu, a kolumny są oddzielone przecinkami. StreamReader odczytuje pliki CSV bez problemów, ponieważ nie zawierają one danych binarnych ani skompresowanych archiwów. XLSX różni się zasadniczo: pakuje wiele dokumentów XML w kontenerze ZIP wraz z metadanymi, motywami i definicjami stylów. Nie ma możliwości prostego czytania tekstu wiersz po wierszu.

To rozróżnienie ma znaczenie przy wyborze narzędzi. Dla plików CSV, StreamReader lub File.ReadAllLines są całkowicie wystarczające. W przypadku prawdziwych skoroszytów Excel potrzebna jest biblioteka, która rozumie format na poziomie strukturalnym.

Jak zainstalować IronXL w projekcie .NET?

Biblioteka IronXL .NET odczytuje, zapisuje i tworzy pliki Excel bez konieczności instalowania programu Microsoft Excel. Obsługuje formaty XLSX, XLS, XLSM, CSV i TSV oraz działa w systemach Windows, Linux, macOS i kontenerach Docker.

Aby zainstalować IronXL, użyj konsoli NuGet Package Manager Console lub interfejsu CLI .NET. Pakiet jest opublikowany na NuGet.org jako IronXL:

PM > Install-Package IronXL.Excel

Po instalacji dodaj dyrektywę using IronXL; do swojego pliku, aby móc pracować z dokumentami Excel.

Alternatywa dla odczytu plików Excel za pomocą StreamReader w C# - IronXL: Obraz 5 - Instalacja

Szczegółowe instrukcje instalacji i opcje konfiguracji NuGet można znaleźć w przewodniku instalacji IronXL NuGet. Dostępna jest bezpłatna licencja próbna, dzięki czemu przed zakupem można przetestować IronXL w swoim projekcie.

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

Jak odczytywać pliki Excel za pomocą IronXL?

IronXL zapewnia intuicyjny interfejs API do odczytu plików Excel w języku C#. W przeciwieństwie do StreamReader, IronXL rozumie wewnętrzną strukturę Excela i daje ci czysty dostęp do wierszy, kolumn oraz wartości komórek. Dokumentacja IronXL zawiera pełne opisy API dla wszystkich obsługiwanych operacji.

Oto jak odczytać plik Excel za pomocą IronXL przy użyciu instrukcji najwyższego poziomu:

using IronXL;

// Load the Excel file from disk
WorkBook workbook = WorkBook.Load("ProductData.xlsx");
WorkSheet worksheet = workbook.DefaultWorkSheet;

// Read a specific cell by address
string cellValue = worksheet["A1"].StringValue;
Console.WriteLine($"Cell A1 contains: {cellValue}");

// Iterate over a range of cells
foreach (var cell in worksheet["A1:C10"])
{
    Console.WriteLine($"{cell.AddressString}: {cell.Text}");
}

// Read a numeric value
decimal price = worksheet["B2"].DecimalValue;
Console.WriteLine($"Price: {price:C}");

Metoda WorkBook.Load automatycznie wykrywa format pliku (XLSX, XLS, XLSM, CSV) i obsługuje całe skomplikowane parsowanie. Uzyskujesz dostęp do komórek za pomocą standardowej notacji Excel, takiej jak "A1" lub zakresów takich jak "A1:C10", co sprawia, że kod jest od razu czytelny dla każdego zaznajomionego z arkuszami kalkulacyjnymi.

Dostęp do wielu arkuszy

Wiele skoroszytów zawiera więcej niż jeden arkusz. IronXL pozwala otwierać i przeglądać skoroszyty z pełnym wyliczeniem arkuszy:

using IronXL;

WorkBook workbook = WorkBook.Load("MultiSheet.xlsx");

// List all worksheets
foreach (WorkSheet sheet in workbook.WorkSheets)
{
    Console.WriteLine($"Sheet: {sheet.Name}, Rows: {sheet.RowCount}");
}

// Access a sheet by name
WorkSheet summary = workbook.GetWorkSheet("Summary");
string totalRevenue = summary["B20"].StringValue;
Console.WriteLine($"Total Revenue: {totalRevenue}");

// Access a sheet by index
WorkSheet firstSheet = workbook.WorkSheets[0];
int lastRow = firstSheet.RowCount;
Console.WriteLine($"Last row in first sheet: {lastRow}");

To podejście jest znacznie czystsze niż jakakolwiek próba parsowania Excela za pomocą StreamReader lub manipulacji ciągami znaków.

Jak odczytać dane z Excela ze strumienia 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 z formularzy internetowych, pobieranie skoroszytów z kolumny BLOB bazy danych lub przetwarzanie plików pobranych z pamięci masowej w chmurze (Azure Blob Storage, AWS S3). IronXL obsługuje te scenariusze przez WorkBook.FromStream:

using IronXL;
using System.IO;

// Simulate reading file bytes (e.g., from a database or web upload)
byte[] fileBytes = File.ReadAllBytes("ProductData.xlsx");

using MemoryStream stream = new MemoryStream(fileBytes);
WorkBook workbook = WorkBook.FromStream(stream);
WorkSheet worksheet = workbook.DefaultWorkSheet;

// Get row and column counts
Console.WriteLine($"Rows: {worksheet.RowCount}, Columns: {worksheet.ColumnCount}");

// Convert to DataTable for database or grid binding
var dataTable = worksheet.ToDataTable(useHeaderRow: true);
Console.WriteLine($"Loaded {dataTable.Rows.Count} data rows");

foreach (System.Data.DataRow row in dataTable.Rows)
{
    string productName = row["ProductName"]?.ToString() ?? string.Empty;
    string sku = row["SKU"]?.ToString() ?? string.Empty;
    Console.WriteLine($"Product: {productName}, SKU: {sku}");
}

WorkBook.FromStream akceptuje każdy Stream -- MemoryStream, FileStream, lub strumień sieciowy. Ta elastyczność oznacza, że nigdy nie musisz zapisywać plików tymczasowych na dysku tylko po to, aby odczytać dane z Excela. Konwersja do DataTable integruje się również bezpośrednio z SqlBulkCopy, kontrolkami wiązania danych i frameworkami raportującymi.

Wynik przetwarzania strumieniowego

Alternatywa dla odczytu plików Excel za pomocą StreamReader w C# - IronXL: Obraz 6 - Odczyt Excela z MemoryStream: Wydruk

Kiedy stosuje się odczyt danych z Excela sterowany zdarzeniami?

W architekturach zdarzeniowych -- na przykład przycisk wczytywania plików w Windows Forms lub działanie kontrolera w ASP.NET -- sygnatura metody często zawiera parametry object sender i EventArgs e. Logika przetwarzania w Excelu nadal korzysta z tego samego interfejsu API IronXL, ale jest wywoływana z poziomu procedury obsługi zdarzenia, a nie z instrukcji najwyższego poziomu. IronXL płynnie integruje się z dowolnym przepływem pracy opartym na zdarzeniach lub asynchronicznym, ponieważ nie jest zależny od wątku interfejsu użytkownika.

Alternatywa dla odczytu plików Excel za pomocą StreamReader w C# - IronXL: Obraz 7 - Funkcje

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

Podczas gdy StreamReader może obsługiwać pliki CSV, aplikacje produkcyjne często potrzebują przenosić dane między Excela a CSV. IronXL sprawia, że konwersja formatów jest prosta. Wystarczy kilka wierszy kodu, aby wyeksportować dane z Excela do pliku CSV lub zaimportować dane z pliku CSV do skoroszytu:

using IronXL;

// Load an Excel file and save as CSV
WorkBook workbook = WorkBook.Load("SalesData.xlsx");
workbook.SaveAsCsv("output.csv");

// Load a CSV file and save as Excel
WorkBook csvWorkbook = WorkBook.LoadCSV("legacy-report.csv");
csvWorkbook.SaveAs("converted.xlsx");

// Export a specific worksheet to CSV
WorkSheet worksheet = workbook.WorkSheets[0];
worksheet.SaveAsCsv("sheet1-export.csv");

Te konwersje pozwalają zachować dane przy zmianie formatu kontenera. Podczas konwersji pliku Excel do formatu CSV program IronXL domyślnie eksportuje pierwszy arkusz; możesz wybrać dowolny arkusz. Konwersja pliku CSV do formatu Excel tworzy odpowiednio ustrukturyzowany skoroszyt, który można następnie sformatować, dodać do niego formuły i wpisać dodatkowe dane.

Jakie są różnice w obsługiwanych formatach?

Porównanie StreamReader i IronXL pod kątem odczytu różnych formatów plików
Format plikuStreamReaderIronXLUwagi
CSV (.csv)TakTakZwykły tekst; StreamReader działa dobrze
XLSX (.xlsx)NieTakPlik XML skompresowany w formacie ZIP; wymaga biblioteki
XLS (.xls)NieTakFormat binarny BIFF; wymaga biblioteki
XLSM (.xlsm)NieTakSkoroszyt z włączoną obsługą makr
TSV (.tsv)TakTakZwykły tekst rozdzielony tabulatorami

Jak tworzyć i formatować pliki Excel za pomocą IronXL?

Odczytywanie danych z Excela to tylko część procesu. Wiele aplikacji wymaga również tworzenia nowych plików Excel i stosowania formatowania. IronXL obsługuje formatowanie komórek, w tym czcionki, kolory, obramowania, formaty liczb i scałanie komórek:

using IronXL;

// Create a new workbook and worksheet
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet sheet = workbook.CreateWorkSheet("Report");

// Write headers with formatting
sheet["A1"].Value = "Product";
sheet["B1"].Value = "Units Sold";
sheet["C1"].Value = "Revenue";

// Apply bold formatting to header row
sheet["A1:C1"].Style.Font.Bold = true;
sheet["A1:C1"].Style.SetBackgroundColor("#4472C4");
sheet["A1:C1"].Style.Font.Color = "#FFFFFF";

// Write data rows
string[] products = { "Widget A", "Widget B", "Widget C" };
int[] units = { 120, 85, 210 };
decimal[] revenues = { 2400.00m, 1700.00m, 4200.00m };

for (int i = 0; i < products.Length; i++)
{
    sheet[$"A{i + 2}"].Value = products[i];
    sheet[$"B{i + 2}"].Value = units[i];
    sheet[$"C{i + 2}"].Value = revenues[i];
    sheet[$"C{i + 2}"].FormatString = "$#,##0.00";
}

// Save the workbook
workbook.SaveAs("FormattedReport.xlsx");
Console.WriteLine("Report created successfully.");

Możliwość zarówno odczytu istniejących skoroszytów, jak i tworzenia nowych sformatowanych plików sprawia, że IronXL jest kompletnym rozwiązaniem Excel dla aplikacji .NET. Zapoznaj się z pełną stroną funkcji IronXL, aby uzyskać szczegółowy opis obsługiwanych operacji.

Eksportowanie danych do innych formatów

IronXL obsługuje również eksport danych skoroszytu do obiektów DataSet, co jest szczególnie przydatne podczas ładowania wielu arkuszy do pamięci w celu wykonywania obliczeń międzyarkuszowych lub operacji zbiorczego wstawiania danych do bazy danych. Metoda ToDataSet zwraca DataSet, gdzie każdy arkusz staje się DataTable.

Jak uzyskać licencję i wdrożyć IronXL w środowisku produkcyjnym?

IronXL jest bezpłatny do celów programistycznych i testowych. W przypadku aplikacji produkcyjnych wymagana jest licencja. Opcje licencji IronXL można sprawdzić na stronie produktu, która obejmuje poziomy Developer, Team i Organization w zależności od wymagań wdrożeniowych.

Po zakupie należy zastosować klucz licencyjny w kodzie przed wywołaniem jakiejkolwiek funkcji IronXL:

IronXL.License.LicenseKey = "YOUR-LICENSE-KEY-HERE";

Alternatywnie, ustaw zmienną środowiskową IRONXL_LICENSE_KEY w twoim środowisku wdrożeniowym i IronXL automatycznie ją odnajdzie. Jest to preferowane podejście w przypadku wdrożeń kontenerowych (Docker, Kubernetes) oraz środowisk chmurowych, gdzie twarde kodowanie kluczy jest niedopuszczalne.

W celu oceny dostępna jest bezpłatna licencja próbna zapewniająca pełną funkcjonalność, dzięki czemu można przetestować IronXL w konkretnych warunkach pracy przed podjęciem decyzji o zakupie. Wersja próbna jest dostępna bez karty kredytowej i aktywuje się natychmiast.

W porównaniu z alternatywami, takimi jak Microsoft.Office.Interop.Excel, IronXL ma kilka zalet wdrożeniowych:

  • Nie ma wymogu, aby na serwerze był zainstalowany program Microsoft Excel
  • Kompatybilność z systemem Linux i Dockerem — kluczowa dla aplikacji natywnych dla chmury
  • Brak problemów związanych z zarządzaniem cyklem życia obiektów COM lub wątkiem typu apartment
  • Szybsze uruchamianie i mniejsze zużycie pamięci w środowiskach serwerowych
  • Spójne działanie na wszystkich obsługiwanych platformach

Te cechy sprawiają, że IronXL jest praktycznym wyborem dla każdej aplikacji .NET, która musi przetwarzać pliki Excel w środowisku produkcyjnym, zarówno lokalnym, jak i w chmurze.

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