IRONSOFTWAREHOME
KORZYSTANIE Z IRONXL

Jak czytać pliki Excel Open Office w C# bez zainstalowanego Excel

Curtis Chau
Curtis Chau
Updated: 28 czerwca 2026

Odczytywanie i przetwarzanie plików OpenDocument Spreadsheet (ODS) oraz Excel w języku C# jest proste, jeśli używa się odpowiedniej biblioteki. Z IronXL, mozna zaladowac dowolny plik XLS, XLSX, ODS lub CSV do obiektu WorkBook, korzystajac z jednego wywolania metody – nie wymaga instalacji Microsoft Excel, rejestracji COM ani problemow z Interop. Ten przewodnik przeprowadzi Cię przez każdy krok: instalację pakietu, ładowanie plików, wyodrębnianie wartości wpisanych w komórkach, pracę z nazwanymi arkuszami, obsługę scalonych komórek oraz wdrażanie w środowisku Linux lub w środowiskach kontenerowych.

Jak zainstalować IronXL w projekcie .NET?

Instalacja menedżera pakietów NuGet

Dodaj IronXL do swojego projektu za pomocą menedżera pakietów NuGet. Otwórz konsolę menedżera pakietów w Visual Studio i uruchom:

PM > Install-Package IronXL.Excel

IronXL obsluguje .NET 8, .NET 9, .NET 10, .NET Framework 4.6.2+ oraz .NET Standard 2.0, co sprawia, ze nadaje sie zarówno do nowoczesnych, jak i starszych baz kodu. Po zainstalowaniu pakietu nalezy dodac dyrektywe using IronXL; na poczatku dowolnego pliku, który pracuje z arkuszami kalkulacyjnymi, i bedziesz gotowy do zaladowania pierwszego skoroszytu.

W przypadku Azure Functions, kontenerów Docker lub interfejsów API hostowanych w systemie Linux nie jest wymagana żadna dodatkowa konfiguracja środowiska uruchomieniowego. Biblioteka zawiera wszystko, czego potrzebuje, i nie korzysta z komponentów automatyzacji programu Excel.

Jak załadować plik OpenOffice lub Excel w C#?

IronXL traktuje pliki ODS, XLS, XLSX i CSV identycznie za pomoca metody WorkBook.Load. Przekazujesz bezwzględną lub względną ścieżkę do pliku, a biblioteka wykrywa format na podstawie nagłówka pliku — nie tylko rozszerzenia. Oznacza to, ze plik przemianowany z .ods na .xlsx jest nadal poprawnie czytany.

using IronXL;

// Load an OpenDocument Spreadsheet (.ods) produced by LibreOffice Calc or OpenOffice
WorkBook workbook = WorkBook.Load("quarterly_report.ods");

// Access the first worksheet by index
WorkSheet sheet = workbook.WorkSheets[0];

// Read a cell value
string companyName = sheet["A1"].StringValue;
int recordCount   = sheet["B1"].IntValue;

Console.WriteLine($"Company : {companyName}");
Console.WriteLine($"Records : {recordCount}");

To samo polecenie działa dla plików XLSX i XLS — wystarczy zmienić ścieżkę. WorkBook.Load zwraca ten sam silnie typowany obiekt niezaleznie od formatu zródla, wiec reszta kodu pozostaje identyczna, niezaleznie czy plik pochodzi z Microsoft Excel, LibreOffice czy dowolnej innej aplikacji zgodnej z ODF.

Jak odczytać każdy wiersz i komórkę w arkuszu?

Iteracja kolekcji Rows

Iterowanie przez wszystkie wiersze i komórki to najczesciej wykonywane zadanie przetwarzania Excela - bez wzgledu na to, czy sprawdzana jest poprawnosc danych importowanych, przeksztalcane sa rekordy, czy zasilany jest rurociag raportowania. IronXL udostepnia kolekcje Rows w kazdym WorkSheet:

using IronXL;

WorkBook workbook  = WorkBook.Load("customers.xlsx");
WorkSheet worksheet = workbook.WorkSheets[0];

Console.WriteLine($"Total rows    : {worksheet.RowCount}");
Console.WriteLine($"Total columns : {worksheet.ColumnCount}");
Console.WriteLine();

foreach (var row in worksheet.Rows)
{
    foreach (var cell in row)
    {
        if (!cell.IsEmpty)
            Console.Write($"{cell.StringValue,-20}");
    }
    Console.WriteLine();
}

Wlasciwosci RowCount i ColumnCount zwracaja tylko zakres wypelniony - puste, końcowe wiersze i kolumny nie sa uwzglednione. Sprawdzenie cell.IsEmpty przed odczytem zapobiega niepotrzebnemu przetwarzaniu na rzadkich arkuszach.

W przypadku duzych plików rozwaz uzycie dostepu opartego na zakresach (worksheet["A1:D500"]) zamiast pelno-arkuszowego iterowania. Ogranicza to liczbę komórek ładowanych do pamięci i przyspiesza przetwarzanie, gdy potrzebny jest tylko podzbiór danych.

Jak wyodrębnić wartości wpisane w komórkach?

Akcesory właściwości typu

Komórki w rzeczywistym arkuszu kalkulacyjnym zawierają ciągi znaków, liczby całkowite, ułamki dziesiętne, wartości logiczne i daty. IronXL udostępnia dedykowane właściwości typowane, dzięki czemu nigdy nie musisz ręcznie analizować surowych ciągów znaków:

using IronXL;

WorkBook workbook = WorkBook.Load("inventory.xlsx");
WorkSheet sheet   = workbook.GetWorkSheet("Products");

// Typed accessors handle conversion automatically
string  productName = sheet["A2"].StringValue;
int     quantity    = sheet["B2"].IntValue;
decimal unitPrice   = sheet["C2"].DecimalValue;
bool    inStock     = sheet["D2"].BoolValue;
DateTime? lastAudit = sheet["E2"].DateTimeValue;

Console.WriteLine($"Product  : {productName}");
Console.WriteLine($"Qty      : {quantity}");
Console.WriteLine($"Price    : {unitPrice:C}");
Console.WriteLine($"In Stock : {inStock}");
Console.WriteLine($"Audited  : {lastAudit?.ToString("d") ?? "Never"}");

Gdy komórka zawiera formułę, IronXL oblicza ją i zwraca wynik obliczeń za pośrednictwem tych samych właściwości typowanych. Nie ma potrzeby wywoływania oddzielnej metody oceny. W przypadku komórek, które mogą być puste lub zawierać typ niezgodny, biblioteka zwraca wartość domyślną dla tego typu zamiast zgłaszać wyjątek, co upraszcza logikę sprawdzania poprawności danych wejściowych.

Właściwości wartości komórek IronXL i ich odpowiedniki w typach .NET
WłaściwośćTyp .NETZwraca wartość, gdy jest pustaUwagi
StringValuestringPusty ciąg znakówZawsze bezpieczne; konwertuje dowolną komórkę na tekst
IntValueint0Skraca liczby dziesiętne
DecimalValuedecimal0mZachowuje precyzję w odniesieniu do danych finansowych
DoubleValuedouble0.0Zastosowanie w przypadku wartości naukowych lub statystycznych
BoolValueboolfalseOdczytuje komórki TRUE/FALSE w Excelu
DateTimeValueDateTime?nullNullable — sprawdź przed użyciem

Jak pracować z wieloma nazwanymi arkuszami?

Dostęp według nazwy, indeksu lub iteracji

Arkusze kalkulacyjne dla przedsiębiorstw często zawierają kilka nazwanych arkuszy — po jednym na miesiąc, region lub linię produktów. IronXL oferuje wiele sposobów uzyskiwania do nich dostępu:

using IronXL;

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

// Option 1: access by name (throws if the sheet does not exist)
WorkSheet januarySheet = workbook.GetWorkSheet("January");

// Option 2: iterate all sheets in the workbook
foreach (WorkSheet ws in workbook.WorkSheets)
{
    Console.WriteLine($"Sheet: {ws.Name}  |  Rows: {ws.RowCount}");

    // Read the header row from each sheet
    string header = ws["A1"].StringValue;
    Console.WriteLine($"  Header: {header}");
}

// Option 3: access by zero-based index
WorkSheet lastSheet = workbook.WorkSheets[workbook.WorkSheets.Count - 1];
Console.WriteLine($"Last sheet: {lastSheet.Name}");

Gdy nazwa arkusza jest znana na etapie projektowania, GetWorkSheet jest najjasniejsza opcja. Dla dynamicznego przetwarzania - gdzie nazwy arkuszy pochodza od uzytkownika badz konfiguracji - iterowanie przez kolekcje WorkSheets uniemozliwia sztywne zalozenia i obsluguje skoroszyty z rózna liczba arkuszy.

Jak radzisz sobie ze scalonymi komórkami i sformatowanymi obszarami?

W raportach i pulpitach nawigacyjnych często stosuje się scalone komórki do tworzenia nagłówków, grupowanych etykiet i wierszy podsumowujących. IronXL odczytuje wartość z lewej górnej komórki połączonego obszaru, dokładnie tak, jak wyświetla ją program Excel:

using IronXL;

WorkBook workbook = WorkBook.Load("report_with_merges.xlsx");
WorkSheet sheet   = workbook.DefaultWorkSheet;

// The merged region A1:D1 stores its value in cell A1
string reportTitle = sheet["A1"].StringValue;
Console.WriteLine($"Report title : {reportTitle}");

// Read cell formatting metadata
var titleCell = sheet["A1"];
Console.WriteLine($"Bold         : {titleCell.Style.Font.Bold}");
Console.WriteLine($"Font size    : {titleCell.Style.Font.Height}");

// Scan an entire column for non-empty section headers
foreach (var cell in sheet["A1:A100"])
{
    if (!cell.IsEmpty && cell.Style.Font.Bold)
        Console.WriteLine($"Section header at {cell.AddressString}: {cell.StringValue}");
}

Drzewo wlasciwosci Style odzwierciedla strukture specyfikacji OOXML SpreadsheetML, wiec nazwy wlasciwosci beda znane, jesli pracowano z Open XML SDK. Jednak IronXL łączy całą tę złożoność w przejrzystym API, które nie wymaga od użytkownika żadnej manipulacji XML.

Jak importować pliki CSV za pomocą tego samego API?

Pliki CSV produkowane przez eksport danych z baz danych, systemy CRM i starsze aplikacje mozna czytac przez to samo wywolanie WorkBook.Load. IronXL wywnioskuje separator na podstawie zawartości pliku:

using IronXL;

// Load a comma-separated values file -- same method, same API
WorkBook csvWorkbook  = WorkBook.Load("export.csv");
WorkSheet csvSheet    = csvWorkbook.DefaultWorkSheet;

Console.WriteLine($"CSV rows loaded: {csvSheet.RowCount}");

// Process rows exactly like any other worksheet
foreach (var row in csvSheet.Rows)
{
    string id   = row[0].StringValue;
    string name = row[1].StringValue;
    Console.WriteLine($"{id,-10} {name}");
}

Po zaladowaniu dane mozna zapisac jako XLSX, uzywajac csvWorkbook.SaveAs("output.xlsx"). Jest to typowy schemat dla procesów konwersji plików CSV do formatu Excel — pobieranie pliku CSV, wzbogacanie go o obliczone kolumny lub formatowanie oraz zwracanie sformatowanego raportu XLSX użytkownikowi.

Dla plików rozdzielanych tabulatorami lub niestandardowych separatorów, nalezy uzyc WorkBook.LoadCSV("file.tsv", fileFormat: ExcelFileFormat.TSV), aby okreslic format jawnie.

Obsługiwane formaty plików wejściowych w IronXL
FormatRozszerzenieWyprodukowane przezUwagi
XLSX.xlsxExcel 2007+, LibreOfficeDomyślny nowoczesny format; oparty na XML
XLS.xlsExcel 97–2003Format binarny; pełna obsługa odczytu/zapisu
ODS.odsLibreOffice, OpenOfficeStandard arkusza kalkulacyjnego OpenDocument
CSV.csvDowolna aplikacjaAutomatycznie wykryto separator; brak formatowania
TSV.tsvEksporty baz danychRozdzielane tabulatorami; należy wyraźnie określić format

Jak IronXL wypada w porównaniu z Microsoft.Office.Interop.Excel?

Interop, Open XML SDK i IronXL Side by Side

Najpopularniejszą alternatywą dla IronXL for .NET do automatyzacji Excela jest Microsoft.Office.Interop.Excel. Zrozumienie kompromisów pomoże Ci wybrać odpowiednie narzędzie do Twojego projektu.

Microsoft Interop stanowi nakładkę na model obiektowy COM programu Excel. Oznacza to, że program Excel musi być zainstalowany na każdym komputerze, na którym działa kod — w tym na serwerach internetowych, agentach kompilacji i maszynach wirtualnych w chmurze. Zarzadzanie cyklem zycia obiektów COM jest reczne: musisz jawnie zwolnic kazdy obiekt Range, Worksheet i Workbook, w przeciwnym razie procesy Excela beda kumulowac sie w tle i zuzywac pamiec, az serwer zostanie zrestartowany. Kwestią budzącą obawy jest również licencjonowanie: umowa EULA pakietu Office zabrania automatyzacji po stronie serwera w wielu scenariuszach.

IronXL pozwala uniknąć wszystkich tych ograniczeń. Jest to biblioteka czysto zarządzana, bez zależności od COM. Obiekt WorkBook jest standardowa klasa .NET; O czyszczenie pamięci dba moduł garbage collector. Ten sam kod można uruchomić na laptopie programisty, w usłudze Azure App Service, w kontenerze Docker lub na komputerze Raspberry Pi z systemem Linux.

Alternatywą jest pakiet Open XML SDK firmy Microsoft. Zapewnia on bezpośredni dostęp do formatu plików OOXML bez konieczności korzystania z programu Excel, ale działa na bardzo niskim poziomie — użytkownik manipuluje elementami XML bezpośrednio. Odczytanie wartości pojedynczej komórki wymaga poruszania się po wspólnych tabelach ciągów znaków, odwołaniach do komórek i indeksach stylów. IronXL opakowuje to wszystko w jednolinijkowe wywolanie sheet["A1"].StringValue, pokazane w calym tym przewodniku.

Jak wdrożyć przetwarzanie plików Excel w systemie Linux i Docker?

Wdrożenia serwerowe to obszar, w którym niezależność IronXL od programu Excel staje się najbardziej cenna. Ten sam kod, który piszesz w systemie Windows, działa bez zmian w systemach Ubuntu, Alpine Linux lub macOS. W przypadku wdrożeń kontenerowych plik Dockerfile nie wymaga żadnej specjalnej konfiguracji:

# Standard .NET runtime image -- no Office packages needed
FROM mcr.microsoft.com/dotnet/runtime:10.0
WORKDIR /app
COPY --from=build /app/publish .
ENTRYPOINT ["dotnet", "ExcelProcessor.dll"]
SHELL

W przypadku Azure Functions i AWS Lambda IronXL działa w ramach zarządzanego środowiska uruchomieniowego bez konieczności dodatkowej konfiguracji. Obciążenie związane z uruchomieniem na zimno jest minimalne, ponieważ nie ma etapu inicjalizacji COM.

Bezpieczenstwo watkowe jest wbudowane: wiele watków moze otwozac rózne instancje WorkBook równoczesnie bez koniecznosci koordynacji. Jesli musisz przetwarzac tysiece plików równolegle - na przyklad, w procesie w tle przyjmujacym przeslane przez uzytkownika arkusze kalkulacyjne - mozesz uzyc Parallel.ForEach lub Task.WhenAll w calym puli instancji WorkBook bez ryzyka uszkodzenia.

Zużycie pamięci pozostaje przewidywalne, ponieważ IronXL ładuje do pamięci tylko żądany arkusz, a nie cały skoroszyt podczas inicjalizacji. W przypadku bardzo dużych plików to rozróżnienie ma znaczenie: skoroszyt zawierający dziesięć arkuszy o rozmiarze 50 MB nie wymaga 500 MB pamięci RAM tylko po to, aby odczytać jeden arkusz. Dokumentacja wydajności IronXL opisuje dodatkowe strategie obsługi scenariuszy przetwarzania dużych ilości plików.

Jakie są Twoje kolejne kroki?

Najszybszym sposobem na sprawdzenie działania IronXL w Twoim projekcie jest zainstalowanie pakietu NuGet i uruchomienie przykładów z tego przewodnika na prawdziwym pliku z Twojego środowiska. Bezpłatna licencja próbna odblokowuje wszystkie funkcje bez konieczności wprowadzania zmian w kodzie, gdy użytkownik jest gotowy do wdrożenia produkcyjnego.

Poznaj powiązane funkcje IronXL, które uzupełniają odczyt plików:

W przypadku pytań dotyczących licencji, obsługi wielu platform lub konkretnych wymagań dotyczących formatów plików, zespół wsparcia IronXL jest dostępny poprzez czat na żywo oraz e-mail.

Pierwszy krok:
arrow pointer
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