IRONSOFTWAREHOME
KORZYSTANIE Z IRONXL

Eksportuj DataSet do Excel w C# używając IronXL | Nie wymaga Office

Curtis Chau
Curtis Chau
Updated: 28 czerwca 2026

Eksportowanie zestawu danych (DataSet) lub tabeli danych (DataTable) do programu Excel w języku C# zapewnia niezawodny sposób przekształcania ustrukturyzowanych danych przechowywanych w pamięci w profesjonalne pliki arkuszy kalkulacyjnych — bez konieczności instalowania pakietu Microsoft Office na komputerze docelowym. Niezależnie od tego, czy pobierasz rekordy z bazy danych SQL, tworzysz zestaw danych programowo, czy pracujesz z istniejącą siatką danych (DataGrid), IronXL obsługuje cały proces za pomocą przejrzystego interfejsu API opartego na kodzie. W niniejszym przewodniku omówiono wszystkie główne scenariusze — od eksportu pojedynczej tabeli, przez skoroszyty zawierające wiele arkuszy, po wyniki zapytań do bazy danych na żywo — przy użyciu instrukcji C# najwyższego poziomu oraz platformy .NET 10.

Wystarczy raz zainstalować IronXL, napisać kilka linii kodu, a dane znajdą się w pliku XLSX bez żadnej zależności od pakietu Office. Poniższe sekcje obejmują instalację, podstawowe wzorce, zaawansowane formatowanie oraz integrację z bazami danych w sposób umożliwiający bezpośrednie skopiowanie i wklejenie treści do własnych projektów.

Jak zainstalować IronXL for Excel Export?

Przed napisaniem jakiegokolwiek kodu eksportującego dodaj IronXL do swojego projektu za pomocą menedżera pakietów NuGet. Otworz terminal w katalogu glownym projektu i uruchom komende .NET CLI lub uzyj konsoli Package Manager w Visual Studio z komenda Install-Package:

dotnet add package IronXL.Excel

Lub w Package Manager Console Visual Studio:

PM > Install-Package IronXL.Excel

Po instalacji dodaj instrukcję using najwyższego poziomu, aby zaimportować przestrzeń nazw IronXL:

using IronXL;
using System.Data;

IronXL obsługuje platformy .NET 8, .NET 9 i .NET 10, a także starsze wersje .NET Framework (4.6.2+). Nie jest wymagana instalacja pakietu Office na żadnym komputerze — serwerze, komputerze stacjonarnym ani w chmurze. Po zainstalowaniu pakietu można tworzyć, odczytywać i zapisywać pliki XLSX, XLS i CSV całkowicie w kodzie zarządzanym.

Szczegółowe opcje instalacji można znaleźć w przewodniku instalacji IronXL, a historię wersji na stronie pakietu NuGet.

Jak wyeksportować pojedynczą tabelę danych do pliku Excel?

Najczęstszym scenariuszem jest eksportowanie jednej tabeli danych (DataTable) do pojedynczego arkusza. Klasy WorkBook i WorkSheet z IronXL mapuja sie naturalnie na model obiektowy Excel. Tworzysz skoroszyt, dodajesz arkusz, a następnie iterujesz kolumny i wiersze tabeli danych.

Ponizszy przyklad tworzy Employees DataTable w pamieci i zapisuje go do EmployeeData.xlsx:

using IronXL;
using System.Data;

// Build an in-memory DataTable
DataTable dt = new DataTable("Employees");
dt.Columns.Add("ID", typeof(int));
dt.Columns.Add("Name", typeof(string));
dt.Columns.Add("Department", typeof(string));

dt.Rows.Add(1, "John Smith", "Engineering");
dt.Rows.Add(2, "Sarah Jones", "Marketing");
dt.Rows.Add(3, "Mike Wilson", "Sales");

// Create a workbook and a named worksheet
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet worksheet = workbook.CreateWorkSheet("Employees");

// Write column headers in row 0
for (int col = 0; col < dt.Columns.Count; col++)
{
    worksheet.SetCellValue(0, col, dt.Columns[col].ColumnName);
}

// Write data rows starting at row 1
for (int row = 0; row < dt.Rows.Count; row++)
{
    for (int col = 0; col < dt.Columns.Count; col++)
    {
        worksheet.SetCellValue(row + 1, col, dt.Rows[row][col].ToString());
    }
}

workbook.SaveAs("EmployeeData.xlsx");

Wynik

Jak wyeksportowac zestaw danych do Excela w VB .NET: Kompletny przewodnik z IronXL: Obraz 1 - Wynik eksportu prostego DataTable do Excela w VB.NET

SetCellValue akceptuje int, double, string i bool — wiec uzyskujesz natywne typy komorek Excel bez dodatkowego rzutowania. Schemat petli dziala dla tabel dowolnej wielkosci, poniewaz IronXL zapisuje bezposrednio do pamieci i zapisuje na dysk tylko, gdy jest wywolywany SaveAs, co utrzymuje proces efektywnym nawet dla tysiecy wierszy.

Aby uzyskać szerszy obraz technik odczytu i zapisu, samouczek IronXL C# obejmuje pełen zakres operacji na plikach wraz z tym wzorcem eksportu.

Jak wyeksportować zestaw danych do wielu arkuszy programu Excel?

Gdy zestaw danych (DataSet) zawiera kilka powiązanych tabel — takich jak "Produkty" i "Zamówienia" — można przypisać każdą tabelę danych (DataTable) do osobnego arkusza w ramach jednego skoroszytu. Dzięki temu odbiorcy mogą przeglądać wszystkie powiązane dane w jednym pliku bez konieczności otwierania wielu dokumentów.

Poniższa petla iteruje ds.Tables i tworzy jeden arkusz na tabele:

using IronXL;
using System.Data;

// Build a DataSet with two related tables
DataSet ds = new DataSet("CompanyData");

DataTable dtProducts = new DataTable("Products");
dtProducts.Columns.Add("ProductID", typeof(int));
dtProducts.Columns.Add("ProductName", typeof(string));
dtProducts.Columns.Add("Price", typeof(decimal));
dtProducts.Rows.Add(101, "Widget A", 29.99m);
dtProducts.Rows.Add(102, "Widget B", 49.99m);
ds.Tables.Add(dtProducts);

DataTable dtOrders = new DataTable("Orders");
dtOrders.Columns.Add("OrderID", typeof(int));
dtOrders.Columns.Add("Customer", typeof(string));
dtOrders.Columns.Add("Total", typeof(decimal));
dtOrders.Rows.Add(1001, "Acme Corp", 599.90m);
dtOrders.Rows.Add(1002, "Tech Inc", 299.95m);
ds.Tables.Add(dtOrders);

// Create one workbook and iterate each DataTable
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);

foreach (DataTable table in ds.Tables)
{
    WorkSheet sheet = workbook.CreateWorkSheet(table.TableName);

    // Write headers
    for (int col = 0; col < table.Columns.Count; col++)
    {
        sheet.SetCellValue(0, col, table.Columns[col].ColumnName);
    }

    // Write rows
    for (int row = 0; row < table.Rows.Count; row++)
    {
        for (int col = 0; col < table.Columns.Count; col++)
        {
            sheet.SetCellValue(row + 1, col, table.Rows[row][col].ToString());
        }
    }
}

workbook.SaveAs("CompanyReport.xlsx");

Wynik

Jak wyeksportowac zestaw danych do Excela w VB .NET: Kompletny przewodnik z IronXL: Obraz 2 - Wygenerowany plik Excel z wyeksportowanymi zestawami danych jako osobne arkusze

Każdy arkusz ma nazwę zgodną z nazwą źródłowej tabeli DataTable, co ułatwia poruszanie się po programie Excel. Poniewaz WorkBook.Create przydziela skoroszyt w pamieci, mozesz nadal dodawac arkusze w petli bez ponownego otwierania pliku — IronXL buduje cala strukture XLSX przed zapisaniem na dysk.

Dokumentacja IronXL WorkBook zawiera listę wszystkich metod dostępnych dla obiektu WorkBook, w tym zmianę kolejności arkuszy, ochronę hasłem oraz zapisywanie w formatach innych niż XLSX.

Jak dodać formatowanie nagłówków do eksportów do programu Excel?

Eksport zwykłych danych jest funkcjonalny, ale dodanie pogrubionych nagłówków i szerokości kolumn sprawia, że wynik jest od razu użyteczny w kontekście biznesowym. IronXL udostepnia stylizowanie komorek i zakresow dzieki obiektowi Style przypisanemu do dowolnego zakresu WorkSheet.

Poniższy fragment kodu stosuje pogrubienie czcionki w wierszu nagłówkowym i automatycznie dostosowuje rozmiar kolumn po zapisaniu danych:

using IronXL;
using System.Data;

DataTable dt = new DataTable("Sales");
dt.Columns.Add("Region", typeof(string));
dt.Columns.Add("Q1", typeof(decimal));
dt.Columns.Add("Q2", typeof(decimal));
dt.Columns.Add("Q3", typeof(decimal));
dt.Columns.Add("Q4", typeof(decimal));

dt.Rows.Add("Nierth", 120000m, 135000m, 142000m, 158000m);
dt.Rows.Add("South", 98000m, 104000m, 112000m, 121000m);
dt.Rows.Add("East",  87000m, 93000m,  99000m,  108000m);
dt.Rows.Add("West",  145000m, 152000m, 161000m, 174000m);

WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet sheet = workbook.CreateWorkSheet("Sales");

// Write and style headers
for (int col = 0; col < dt.Columns.Count; col++)
{
    sheet.SetCellValue(0, col, dt.Columns[col].ColumnName);
    sheet["A1:E1"].Style.Font.Bold = true;
    sheet["A1:E1"].Style.Font.Height = 12;
}

// Write data rows
for (int row = 0; row < dt.Rows.Count; row++)
{
    for (int col = 0; col < dt.Columns.Count; col++)
    {
        sheet.SetCellValue(row + 1, col, dt.Rows[row][col]);
    }
}

workbook.SaveAs("SalesReport.xlsx");

Wlasciwosc Style.Font.Bold dotyczy calego zakresu naglowka w jednym wyrazeniu. IronXL obsluguje rowniez kolory tła (Style.BackgroundColor), style obramowan (Style.Border), formatowanie liczb (Style.NumberFormat.FormatCode) i wyrównanie poziome (Style.HorizontalAlignment). Pełne wytyczne dotyczące stylizacji można znaleźć w przewodniku po formatowaniu komórek IronXL.

Jak wyeksportować wyniki zapytania do bazy danych do programu Excel?

Łączenie się z bazą danych SQL i eksportowanie wyników bezpośrednio do Excela obejmuje główny praktyczny przypadek użycia — zaplanowane raporty, migawki danych i eksporty administracyjne. Podejscie wypelnia DataSet uzywajac SqlDataAdapter, a nastepnie mapuje wynikowy DataTable na arkusz IronXL.

using IronXL;
using System.Data;
using System.Data.SqlClient;

string connectionString = "Server=localhost;Database=SalesDB;Integrated Security=True;";
string query = "SELECT CustomerID, CompanyName, ContactName, Country FROM Customers";

// Fill DataSet from SQL query
DataSet ds = new DataSet();
using (SqlConnection connection = new SqlConnection(connectionString))
{
    SqlDataAdapter adapter = new SqlDataAdapter(query, connection);
    adapter.Fill(ds, "Customers");
}

DataTable dt = ds.Tables["Customers"]!;

// Create workbook and export
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet worksheet = workbook.CreateWorkSheet("CustomerData");

// Bold header row
for (int col = 0; col < dt.Columns.Count; col++)
{
    worksheet.SetCellValue(0, col, dt.Columns[col].ColumnName);
}
worksheet["A1:D1"].Style.Font.Bold = true;

// Write rows, handling DBNull values safely
for (int row = 0; row < dt.Rows.Count; row++)
{
    for (int col = 0; col < dt.Columns.Count; col++)
    {
        object cellValue = dt.Rows[row][col];
        worksheet.SetCellValue(row + 1, col,
            cellValue == DBNull.Value ? "" : cellValue.ToString()!);
    }
}

workbook.SaveAs("CustomerExport.xlsx");
Console.WriteLine("Export complete.");

Kluczowe punkty dotyczące eksportu baz danych

Kontrola wartości null (cellValue == DBNull.Value ? "" : cellValue.ToString()) prevents exceptions when the database returns NULL wartosci — co jest czestym przypadkiem przy kolumnach opcjonalnych. Pogrubienie w wierszu nagłówkowym pozwala odbiorcom raportu natychmiast odróżnić nagłówki od danych.

Aby uzyskac wiecej wzorcow dotyczacych odczytywania danych z powrotem z Excel do obiektów C#, przewodnik eksportu DataTable IronXL pokazuje, jak odwrócic ten przepływ pracy.

Jak wypada IronXL na tle innych rozwiązań do eksportu z Excela?

Przed wyborem biblioteki warto zrozumieć, jak główne opcje wypadają w porównaniu ze sobą w obszarach, które mają największe znaczenie dla scenariuszy eksportu zestawów danych.

Porównanie bibliotek eksportu do Excela dla scenariuszy .NET DataSet
PodejścieWymagane biuroObsługa formatu XLSXStylizacja APIWiele arkuszyWydajność (duże zbiory danych)
IronXLNieTakPełnaTakDuze
Interop Microsoft OfficeTakTakPełnaTakNiski
EPPlusNieTakCzęścioweTakDuze
ClosedXMLNieTakCzęścioweTakSrednie
CSV (ręcznie)NieNieNieneNieBardzo wysoka

Interop Microsoft Office działa tylko na komputerach z systemem Windows, na których zainstalowano pakiet Office, co wyklucza jego wykorzystanie w wdrożeniach serwerowych i funkcjach chmury. IronXL, EPPlus i ClosedXML obsługują generowanie po stronie serwera — kluczowym czynnikiem wyróżniającym je jest zakres API stylizacji oraz model licencjonowania. Licencja IronXL obejmuje użytkowanie komercyjne i wszystkie docelowe frameworki .NET w ramach jednego pakietu.

W przypadku testów porównawczych i zestawień przeprowadzonych przez podmioty zewnętrzne dokumentacja Microsoftu dotycząca formatów plików Excel oraz strona projektu EPPlus dostarczają dodatkowego kontekstu, który pomoże w dokonaniu właściwego wyboru dla danego projektu.

Jak radzisz sobie z dużymi zbiorami danych bez problemów z pamięcią?

Podczas eksportowania tabel danych zawierających dziesiątki tysięcy wierszy ważne jest, aby zużycie pamięci było przewidywalne. Poniższy wzorzec strumieniuje dane z IDataReader zamiast ladowac najpierw caly zestaw wynikow do DataTable. To unika podwojnego obciazenia pamieci utrzymywania bufora czytnika i DataTable jednoczesnie.

using IronXL;
using System.Data;
using System.Data.SqlClient;

string connectionString = "Server=localhost;Database=InventoryDB;Integrated Security=True;";
string query = "SELECT ProductID, SKU, Description, StockLevel, UnitCost FROM Products";

WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet sheet = workbook.CreateWorkSheet("Inventory");

using SqlConnection conn = new SqlConnection(connectionString);
conn.Open();

using SqlCommand cmd = new SqlCommand(query, conn);
using SqlDataReader reader = cmd.ExecuteReader();

// Write schema-derived headers
for (int col = 0; col < reader.FieldCount; col++)
{
    sheet.SetCellValue(0, col, reader.GetName(col));
}

// Stream rows directly into IronXL without buffering a DataTable
int excelRow = 1;
while (reader.Read())
{
    for (int col = 0; col < reader.FieldCount; col++)
    {
        sheet.SetCellValue(excelRow, col,
            reader.IsDBNull(col) ? "" : reader.GetValue(col).ToString()!);
    }
    excelRow++;
}

workbook.SaveAs("InventoryExport.xlsx");
Console.WriteLine($"Exported {excelRow - 1} rows.");

Ten wzorzec jest zalecany, gdy zestaw wyników może przekroczyć 50 000 wierszy lub gdy jest uruchamiany w ramach usługi o ograniczonej pamięci. Dokumentacja dotycząca wydajności IronXL obejmuje dodatkowe opcje dostrajania pamięci i przepustowości dla eksportów o dużej objętości.

Zbiorcze zapisywanie do pliku CSV w przypadku bardzo dużych eksportów

W przypadku eksportów przekraczających 500 000 wierszy, gdy pamięć jest bardzo ograniczona, warto rozważyć podzielenie wyników na wiele skoroszytów lub eksportowanie do formatu CSV:

using IronXL;

// IronXL can save any workbook as CSV
workbook.SaveAs("LargeExport.csv");

Plik CSV traci formatowanie i obsługę wielu arkuszy, ale pozostaje ważny dla dalszych procesów ETL, które wykorzystują surowe dane rozdzielone separatorami.

Jak zapisywać pliki Excel w różnych formatach i lokalizacjach?

IronXL obsluguje zapisywanie do sciezki pliku, MemoryStream i byte[], co ma znaczenie dla aplikacji ASP.NET zwracajacych Excel jako odpowiedz do pobrania.

using IronXL;
using System.IO;

WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet sheet = workbook.CreateWorkSheet("Report");
sheet.SetCellValue(0, 0, "Generated Report");

// Save to file path
workbook.SaveAs("Report.xlsx");

// Save as XLS (legacy format)
workbook.SaveAs("Report.xls");

// Save to MemoryStream for HTTP response
using MemoryStream ms = new MemoryStream();
workbook.SaveAs(ms);
byte[] fileBytes = ms.ToArray();
// fileBytes can be returned from an ASP.NET controller action

Dla ASP.NET Core, zwroc File(fileBytes, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "Report.xlsx") z akcji kontrolera, aby wywolywana byla opcja pobierania przegladarki. Przewodnik IronXL ASP.NET Excel przedstawia kompletny wzorzec integracji kontrolera.

Jeśli chodzi o alternatywne biblioteki .NET dla programu Excel, Open XML SDK to platforma open source, na której opiera się wiele bibliotek.

Obsługiwane formaty wyjściowe

IronXL zapisuje pliki w następujących formatach bez żadnych dodatkowych zależności:

  • XLSX — format OpenXML, zgodny z programem Excel 2007 i nowszymi wersjami
  • XLS — starszy format binarny, zgodny z programem Excel 97–2003
  • CSV — wartości rozdzielone przecinkami, powszechnie obsługiwane
  • TSV — wartości rozdzielone tabulatorami
  • JSON — eksport danych strukturalnych

Przelacz formaty, zmieniajac rozszerzenie pliku w sciezce SaveAs lub korzystajac z przeciazonej metody, ktora akceptuje wartosc ExcelFileFormat enum.

Jak sprawdzić, czy wyeksportowany plik Excel jest poprawny?

Po wyeksportowaniu pliku można go ponownie odczytać za pomocą IronXL w celu zweryfikowania liczby wierszy, wyrywkowej kontroli wartości lub uruchomienia automatycznych testów w projekcie testowym:

using IronXL;

WorkBook loaded = WorkBook.Load("EmployeeData.xlsx");
WorkSheet sheet = loaded.WorkSheets[0];

// Verify row count (header row + data rows)
int totalRows = sheet.Rows.Count();
Console.WriteLine($"Rows in file: {totalRows}");

// Spot-check specific cell values
string header = sheet["A1"].StringValue;
string firstEmployee = sheet["A2"].StringValue;

Console.WriteLine($"Header: {header}, First row: {firstEmployee}");

Ten wzorzec weryfikacji jest szczególnie przydatny w Suite testów integracyjnych, gdzie przed wysłaniem plików do systemów zewnętrznych należy potwierdzić poprawność eksportu. Przewodnik czytania IronXL pokazuje pełen zakres operacji odczytu dostępnych po załadowaniu pliku.

Więcej informacji na temat wzorców DataSet i DataTable w .NET można znaleźć w dokumentacji Microsoft DataSet, która szczegółowo omawia model obiektowy ADO.NET.

Jakie są Twoje kolejne kroki?

Masz teraz gotowe wzorce dla każdego głównego scenariusza eksportu z DataSet do Excela w C# — od pojedynczej tabeli DataTable po skoroszyty z wieloma arkuszami, eksporty oparte na bazach danych, sformatowane nagłówki i strumieniowanie dużych zbiorów danych. Oto jak wykonać kolejny krok w zależności od celu:

  • Wypróbuj IronXL za darmo — zacznij od bezpłatnej licencji próbnej i przetestuj powyższe przykłady na własnych danych, zanim zdecydujesz się na wdrożenie do produkcji.
  • Przeczytaj pełną dokumentację APIdokumentacja obiektu IronXL obejmuje wszystkie metody dotyczące WorkBook, WorkSheet i zakresów komórek.
  • Odkryj powiazane przewodniki eksportu -- Przewodnik C# DataTable to Excel pokrywa odwrotny przepływ pracy -- odczytywanie Excel z powrotem do obiektow DataTable.
  • Zapoznaj się z opcjami formatowaniadokumentacja dotycząca formatowania komórek w IronXL przedstawia formaty liczb, obramowania, kolory tła oraz opcje wyrównania.
  • Sprawdź licencję — w przypadku wdrożeń produkcyjnych zajrzyj na stronę licencyjną IronXL, aby wybrać opcję Developer, Organization lub Bez opłat licencyjnych.
  • Porównaj z innymi narzędziami Iron Software — jeśli Twój projekt wymaga również generowania plików PDF lub OCR, Suite produktów Iron Software pozwala na połączenie wielu bibliotek w obniżonej cenie.

Opierając się na omówionych tutaj wzorcach, można w pełni zintegrować automatyzację zaplanowanych zadań, punkty końcowe pobierania ASP.NET Core oraz wieloformatowe potoki wyjściowe w zarządzanym języku C# — bez Office, bez COM, bez zależności środowiskowych poza pakietem NuGet.

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