IRONSOFTWAREHOME
KORZYSTANIE Z IRONXL

Jak eksportować DataGridView do Excel w C# z IronXL

Curtis Chau
Curtis Chau
Updated: 28 czerwca 2026

Eksportowanie danych z DataGridView do pliku Excel wymaga zaledwie kilku linii kodu C# przy użyciu IronXL. Utwórz WorkBook, iteruj przez kolumny i wiersze siatki, zapisz każdą wartość komórki do arkusza, a następnie wywołaj SaveAs, aby wygenerować w pełni sformatowany plik .xlsx — bez potrzeby instalacji Microsoft Office.

Jak skonfigurować projekt Windows Forms do eksportu do programu Excel?

Windows Forms to podstawowa biblioteka GUI w ekosystemie .NET, szeroko stosowana do tworzenia aplikacji desktopowych. Kontrolka DataGridView jest jednym z najczęściej używanych komponentów: wyświetla, edytuje i zarządza danymi tabelarycznymi z dowolnego źródła z możliwością wiązania, takiego jak DataTable, wynik zapytania z bazy danych lub lista w pamięci.

Eksportowanie tych danych siatki do programu Excel służy kilku codziennym potrzebom — wysyłaniu raportów do interesariuszy, archiwizowaniu migawek na potrzeby audytu lub przekazywaniu danych do dalszych narzędzi analitycznych. Dwa tradycyjne podejścia to Microsoft Interop Office oraz biblioteki innych producentów. Interop wymaga zainstalowania programu Excel na każdym komputerze, na którym działa aplikacja, co powoduje problemy z cyklem życia obiektów COM i słabą wydajność w środowiskach serwerowych lub chmurowych. Biblioteki takie jak IronXL, ClosedXML i Syncfusion unikają tych problemów, zapisując dane bezpośrednio w formacie plików Open XML bez żadnej zależności od pakietu Office.

W niniejszym przewodniku przedstawiono podejście IronXL w języku C# przeznaczonym dla platformy .NET 10, chociaż IronXL obsługuje platformę .NET Framework 4.6.2 oraz wszystkie nowoczesne wersje Wersji .NET.

Wymagania wstępne

Przed napisaniem jakiegokolwiek kodu eksportującego upewnij się, że spełnione są następujące warunki:

  • Visual Studio 2022 lub nowsze
  • Zainstalowany pakiet .NET 10 SDK
  • Projekt aplikacji Windows Forms zawierający kontrolkę DataGridView
  • Dostęp do NuGet w celu zainstalowania IronXL

Jak zainstalować IronXL?

Otwórz konsolę menedżera pakietów w Visual Studio i uruchom jedno z poniższych poleceń:

PM > Install-Package IronXL.Excel

Alternatywnie, kliknij prawym przyciskiem myszy projekt w Eksploratorze rozwiązań, wybierz Zarządzaj pakietami NuGet, wyszukaj IronXL.Excel i kliknij Zainstaluj.

Eksport danych z DataGridView do Excel w VB .NET 2010 z użyciem IronXL: Obraz 1 - Instalacja

Po zainstalowaniu dodaj dyrektywę using IronXL na początku każdego pliku, który korzysta z funkcji Excela:

using IronXL;
using System.Data;

IronXL obsługuje wszystkie popularne formaty arkuszy kalkulacyjnych: XLSX, XLS, CSV i TSV. W niniejszym przewodniku używany jest format XLSX, ponieważ jest to domyślny format w nowoczesnych wersjach programu Excel.

Jak wypełnić DataGridView przykładowymi danymi?

W przykładzie formularz zawiera DataGridView o nazwie DataGridView1 oraz przycisk o nazwie btnExport. Siatka jest wypełniana w zdarzeniu Load formularza rekordami pracowników przechowywanymi w DataTable:

void Form1_Load(object sender, EventArgs e)
{
    var dt = new DataTable();

    // Define columns with the appropriate .NET type
    dt.Columns.Add("EmployeeID", typeof(int));
    dt.Columns.Add("Name", typeof(string));
    dt.Columns.Add("Department", typeof(string));
    dt.Columns.Add("Salary", typeof(decimal));

    // Add sample rows
    dt.Rows.Add(101, "Sarah Johnson", "Engineering", 85000m);
    dt.Rows.Add(102, "Michael Chen", "Marketing", 72000m);
    dt.Rows.Add(103, "Emily Davis", "Finance", 91000m);
    dt.Rows.Add(104, "James Wilson", "Engineering", 78000m);

    DataGridView1.DataSource = dt;
}

Każda kolumna jest zdefiniowana za pomocą konkretnego typu .NET, aby porównania liczbowe i formatowanie działały poprawnie w dalszej części. Właściwość DataSource wiąże DataTable bezpośrednio z DataGridView, a siatka automatycznie renderuje wszystkie wiersze po otwarciu formularza. W środowisku produkcyjnym dane te zazwyczaj pochodzą z zapytania do bazy danych, zestawu wyników ORM lub odpowiedzi REST API, a nie z wartości zakodowanych na stałe.

Eksport danych z DataGridView do Excel w VB .NET 2010 z użyciem IronXL: Obraz 2 - Wynik DataGridView

Zrozumienie modelu danych DataGridView

DataGridView udostępnia swoją zawartość przez dwie kolekcje: Columns (dla metadanych, takich jak HeaderText i indeks kolumny) oraz Rows (dla rzeczywistych danych komórek). Każdy DataGridViewRow zawiera kolekcję Cells indeksowaną przez pozycję kolumny. Właściwość Value każdej komórki zwraca zapakowany obiekt, który musisz rzutować lub konwertować przed zapisem do komórki Excel. Zrozumienie tej hierarchii jest niezbędne do napisania niezawodnej pętli eksportu.

W tle DataTable przechowuje wartości typowane, więc pensja dziesiętna nie wymaga konwersji na ciąg znaków przed zapisem do arkusza IronXL. Metoda SetCellValue IronXL akceptuje przeciążenia string, double, decimal, int, bool i DateTime, co pozwala zachować oryginalny typ danych w pliku wyjściowym.

Jak wyeksportować dane z DataGridView do pliku Excel z nagłówkami kolumn?

Logika eksportu znajduje się w procedurze obsługi kliknięcia przycisku. Kod tworzy nowy WorkBook, pobiera domyślny arkusz, zapisuje nagłówki kolumn w pierwszym wierszu, a następnie zapisuje każdy wiersz danych poniżej:

void btnExport_Click(object sender, EventArgs e)
{
    var workbook = WorkBook.Create();
    var sheet = workbook.DefaultWorkSheet;

    // Write column headers to row index 0
    for (int col = 0; col < DataGridView1.Columns.Count; col++)
    {
        sheet.SetCellValue(0, col, DataGridView1.Columns[col].HeaderText);
    }

    // Write data rows starting at row index 1
    for (int row = 0; row < DataGridView1.Rows.Count; row++)
    {
        for (int col = 0; col < DataGridView1.Columns.Count; col++)
        {
            object? cellValue = DataGridView1.Rows[row].Cells[col].Value;
            if (cellValue is not null)
            {
                sheet.SetCellValue(row + 1, col, cellValue.ToString()!);
            }
        }
    }

    string outputPath = "EmployeeData.xlsx";
    workbook.SaveAs(outputPath);
    MessageBox.Show("Export complete. File saved to: " + outputPath, "Success");
}

Obiekt WorkBook reprezentuje cały plik Excel w pamięci. DefaultWorkSheet zwraca pierwszy arkusz bez potrzeby tworzenia go jawnie. Pętla zewnętrzna zapisuje tekst nagłówka z HeaderText w wierszu zero. Następnie zagnieżdżona pętla iteruje każdy wiersz danych, sprawdzając, czy nie zawiera wartości null, przed konwersją wartości komórki na ciąg znaków. Przesunięcie row + 1 sprawia, że dane są poniżej wiersza nagłówka. SaveAs zapisuje ukończony skoroszyt jako plik Open XML XLSX na określoną ścieżkę.

Eksport danych z DataGridView do Excel w VB .NET 2010 z użyciem IronXL: Obraz 3 - Wynik Excel

Plik wynikowy otwiera się w programie Excel, Arkuszach Google lub dowolnej aplikacji obsługującej format XLSX. Nagłówki kolumn pojawiają się w pierwszym wierszu, a wszystkie wiersze danych następują w tej samej kolejności, w jakiej pojawiły się w DataGridView.

Jak zastosować formatowanie komórek w wyeksportowanym pliku Excel?

Zwykły zrzut danych jest funkcjonalny, ale nie nadaje się do prezentacji. API stylizacji IronXL pozwala zastosować pogrubione czcionki, kolory tła, kolory tekstu i formaty liczb do dowolnego zakresu komórek przed zapisaniem:

void ExportWithFormatting()
{
    var workbook = WorkBook.Create();
    var sheet = workbook.DefaultWorkSheet;

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

    // Style the header row: bold white text on blue background
    var headerRange = sheet.GetRange("A1:D1");
    headerRange.Style.Font.Bold = true;
    headerRange.Style.SetBackgroundColor("#4472C4");
    headerRange.Style.Font.SetColor("#FFFFFF");

    // Locate the Salary column index
    int salaryColIndex = -1;
    for (int i = 0; i < DataGridView1.Columns.Count; i++)
    {
        if (string.Equals(DataGridView1.Columns[i].HeaderText, "Salary",
            StringComparison.OrdinalIgnoreCase))
        {
            salaryColIndex = i;
            break;
        }
    }

    // Write data rows, preserving numeric types
    for (int row = 0; row < DataGridView1.Rows.Count; row++)
    {
        if (DataGridView1.Rows[row].IsNewRow) continue;

        for (int col = 0; col < DataGridView1.Columns.Count; col++)
        {
            object? cellValue = DataGridView1.Rows[row].Cells[col].Value;
            if (cellValue is null) continue;

            int targetRow = row + 1;

            if (col == salaryColIndex)
            {
                // Write salary as a true numeric decimal
                if (decimal.TryParse(cellValue.ToString(),
                    System.Globalization.NumberStyles.Number,
                    System.Globalization.CultureInfo.InvariantCulture,
                    out decimal decValue))
                {
                    sheet.SetCellValue(targetRow, col, decValue);
                }
                else
                {
                    sheet.SetCellValue(targetRow, col, cellValue.ToString()!);
                }
            }
            else
            {
                sheet.SetCellValue(targetRow, col, cellValue.ToString()!);
            }
        }
    }

    // Apply currency format to the salary column data range
    var salaryRange = sheet.GetRange("D2:D5");
    salaryRange.FormatString = "$#,##0";

    workbook.SaveAs("FormattedEmployeeData.xlsx");
}

Metoda GetRange akceptuje standardową notację Excel (A1:D1) do wyboru ciągłego bloku komórek. Ustawienie Style.Font.Bold, Style.SetBackgroundColor i Style.Font.SetColor stosuje te formaty do każdej komórki w wybranym zakresie. Dla kolumn liczbowych zapisanie wartości jako decimal zamiast ciągu znaków zachowuje typ danych, co oznacza, że Excel może prawidłowo zastosować formatowanie liczby, takie jak $#,##0. Komórki przechowywane jako ciągi znaków nie reagują na kody formatowania liczbowego.

Eksport danych z DataGridView do Excel w VB .NET 2010 z użyciem IronXL: Obraz 4 - Wynik sformatowany Excel

Można rozszerzyć ten wzór, aby zastosować naprzemienny cieńowanie wierszy, automatyczne dopasowanie szerokości kolumn, lub zamrożenie okienek, konsultując się z dokumentacją stylizacji IronXL.

Jak wyeksportować dane z DataGridView do pliku CSV zamiast XLSX?

Niektóre procesy wymagają danych wyjściowych w formacie CSV w celu zapewnienia kompatybilności ze starszymi systemami lub lekkimi potokami danych. IronXL obsługuje eksport do formatu CSV bez konieczności wprowadzania dodatkowych zmian w głównym kodzie:

void ExportToCsv()
{
    var workbook = WorkBook.Create();
    var sheet = workbook.DefaultWorkSheet;

    for (int col = 0; col < DataGridView1.Columns.Count; col++)
    {
        sheet.SetCellValue(0, col, DataGridView1.Columns[col].HeaderText);
    }

    for (int row = 0; row < DataGridView1.Rows.Count; row++)
    {
        if (DataGridView1.Rows[row].IsNewRow) continue;

        for (int col = 0; col < DataGridView1.Columns.Count; col++)
        {
            object? cell = DataGridView1.Rows[row].Cells[col].Value;
            if (cell is not null)
                sheet.SetCellValue(row + 1, col, cell.ToString()!);
        }
    }

    // Saving with a .csv extension produces a comma-separated file
    workbook.SaveAs("EmployeeData.csv");
}

Jedyną zmianą względem eksportu XLSX jest rozszerzenie pliku przekazane do SaveAs. IronXL wykrywa rozszerzenie i automatycznie serializuje skoroszyt w odpowiednim formacie. Ta spójność oznacza, że logika zapisu danych pozostaje identyczna niezależnie od formatu wyjściowego — co stanowi znaczną przewagę nad bibliotekami wymagającymi oddzielnych ścieżek kodu dla każdego formatu.

Eksport do formatu CSV jest szczególnie przydatny, gdy odbiorcą końcowym jest skrypt Python pandas, narzędzie do zbiorczego importu danych z bazy danych lub platforma analityczna, która nie obsługuje plików XLSX w formacie binarnym.

Jak efektywnie radzić sobie z dużymi zbiorami danych w DataGridView?

W przypadku tabel zawierających dziesiątki tysięcy wierszy należy wziąć pod uwagę wydajność. Poniższy wzorzec zmniejsza obciążenie pamięci poprzez skonstruowanie pełnego zestawu danych w jednym przebiegu:

Porównanie metod eksportu IronXL dla dużych zbiorów danych
PodejścieObsługiwane wierszeWymagane biuroZachowanie typografii
Microsoft.Office.Interop.ExcelDo ~65 tys. znaków (powolne)TakCzęściowe
IronXL (komórki tekstowe)Ponad 1 mln wierszyNieNie (cały tekst)
IronXL (komórki z typami danych)Ponad 1 mln wierszyNieTak
IronXL z DataTablePonad 1 mln wierszyNieTak (automatycznie)

Gdy DataGridView jest powiązany z DataTable, można bezpośrednio załadować tabelę do IronXL za pomocą metody WorkSheet.LoadDataTable, całkowicie pomijając iterację komórka po komórce. To podejście jest szybsze i automatycznie zachowuje wszystkie typy kolumn.

Dla siatek nie obsługiwanych przez DataTable, wzorzec komórka po komórce pokazany wcześniej pozostaje standardowym podejściem. Jeśli potrzebujesz eksportować asynchronicznie, aby utrzymać responsywność interfejsu użytkownika podczas dużych eksportów, otocz logikę eksportu wywołaniem Task.Run i await wynik na wątku tła. W dokumentacji dotyczącej asynchronicznych operacji na plikach można znaleźć wzorce dotyczące przesyłania wyników z powrotem do wątku interfejsu użytkownika.

Dlaczego IronXL jest lepszy niż Interop Office do eksportu DataGridView?

Tradycyjne rozwiązania .NET używały Microsoft.Office.Interop.Excel do sterowania działającym procesem Excel. Takie podejście powoduje kilka problemów związanych z wdrażaniem i niezawodnością:

  • Każdy komputer, na którym działa aplikacja, musi mieć zainstalowaną licencjonowaną kopię programu Microsoft Excel
  • Środowiska serwerowe i kontenery w chmurze zazwyczaj nie pozwalają na instalację pakietu Office
  • COM Interop wymaga jawnego zwolnienia każdego obiektu, aby uniknąć wycieków pamięci i procesów Excel typu zombie
  • Obsługa błędów w środowisku COM jest rozbudowana i niestabilna
  • Wydajność szybko spada wraz ze wzrostem liczby wierszy

IronXL zapisuje dane bezpośrednio w formacie pliku OOXML bez uruchamiania żadnego zewnętrznego procesu. Aplikacje są wdrażane jako samodzielne jednostki. API biblioteki jest w pełni zarządzane przez .NET, więc zbieranie śmieci automatycznie zajmuje się pamięcią bez wywołania Marshal.ReleaseComObject. Szybkość jest znacznie wyższa, ponieważ nie dochodzi do komunikacji międzyprocesowej.

Dla zespołów rozważających alternatywne rozwiązania popularną opcją open source jest ClosedXML. IronXL oferuje szerszy zestaw funkcji w tym konwersję PDF, generowanie wykresów, oraz wsparcie komercyjne, co może być czynnikiem w decyzjach zakupu dla przedsiębiorstw. Zapoznaj się z opcjami licencyjnymi IronXL, aby dobrać odpowiedni poziom do wielkości zespołu i scenariusza wdrożenia.

Porównanie funkcji: IronXL vs Interop Office
FunkcjaIronXLInterop Office
Wymagana instalacja pakietu OfficeNieTak
Wdrożenie na serwerze / w chmurzeTakNie (nieobsługiwane)
Model pamięci zarządzanejTakNie (wymagane czyszczenie COM)
Formaty XLSX / CSV / XLSWszystkie trzyZależy od zainstalowanego programu Excel
Eksport do formatu PDF z arkusza kalkulacyjnegoTakWymagana dodatkowa biblioteka

Sekcja samouczków IronXL obejmuje odczytywanie istniejących plików Excel, modyfikowanie szablonów, generowanie wykresów oraz stosowanie formatowania warunkowego — wszystkie te możliwości wynikają naturalnie z przedstawionego tutaj wzorca eksportu DataGridView.

Jakie są Twoje kolejne kroki?

Teraz masz działający kod C# do eksportowania DataGridView do sformatowanego pliku Excel przy użyciu IronXL. W tym miejscu należy wziąć pod uwagę następujące wskazówki:

  • Dodaj obsługę błędów: Otocz kod eksportu blokiem try/catch i wyświetl przyjazny dla użytkownika komunikat, jeśli plik jest zablokowany lub ścieżka jest nieprawidłowa
  • Wsparcie wyboru ścieżki pliku: Użyj SaveFileDialog, aby umożliwić użytkownikom wybór lokalizacji wyjściowej i nazwy pliku w czasie wykonania
  • Załaduj rzeczywiste dane: Zamień przykładowy DataTable na zapytanie do bazy danych używając ADO.NET lub Entity Framework
  • Czytaj istniejące pliki: Użyj WorkBook.Load aby otworzyć istniejący arkusz i zaktualizować go zamiast zawsze tworzyć nowy
  • Eksport do wielu arkuszy: Utwórz dodatkowe obiekty WorkSheet w tym samym WorkBook, aby zorganizować powiązane zestawy danych
  • Zastosuj formatowanie warunkowe: Podświetl komórki, które przekraczają progi, korzystając z API formatowania warunkowego IronXL
  • Zapoznaj się z opcjami licencyjnymi: dostępna jest bezpłatna wersja próbna; Poziomy licencji obejmują zarówno indywidualnych programistów, jak i wdrożenia Enterprise
  • Przejrzyj pełną dokumentację API: Dokumentacja obiektów IronXL opisuje każdą dostępną klasę i metodę
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