IRONSOFTWAREHOME
KORZYSTANIE Z IRONXL

Jak utworzyć tabelę przestawną Excel w języku C#

Curtis Chau
Curtis Chau
Updated: 21 kwietnia 2026

Programowa obsługa tabeli przestawnej programu Excel jest powszechnym wymaganiem w aplikacjach biznesowych, które muszą analizować i obliczać dane źródłowe. Chociaż interoperacyjność programu Excel firmy Microsoft była tradycyjną metodą tworzenia tabel przestawnych w pliku Excel, nowoczesne rozwiązania, takie jak IronXL, oferują znaczące korzyści. Ten przewodnik szczegółowo omawia oba metody z praktycznymi przykładami, które pomogą ci stworzyć tabelę przestawną w Excelu używając C# Interop lub wybrać lepszą alternatywę.

Zrozumienie dwóch podejść

Czym jest Excel Interop?

Excel Interop wykorzystuje COM (Component Object Model) do bezpośredniego sterowania programem Microsoft Excel za pomocą języka C#. Wymaga zainstalowania pakietu Office w systemie i zasadniczo automatyzuje działanie programu Excel tak, jakby użytkownik korzystał z aplikacji. Każdy arkusz, skoroszyt i komórka stają się obiektami, którymi można manipulować za pomocą kodu.

Czym jest IronXL?

IronXL jest samodzielną biblioteką .NET, która może czytać, edytować i tworzyć pliki Excel bez potrzeby Microsoft Office. Działa na systemach Windows, Linux, macOS i kontenerach Docker, co czyni go idealnym dla nowoczesnych scenariuszy wdrażania. Możesz otwierać, zapisywać i eksportować dane bez nadmiaru Interop COM.

Konfiguracja środowiska

Dla Excel Interop

PM > Install-Package Microsoft.Office.Interop.Excel

Dla IronXL

PM > Install-Package IronXL.Excel

Alternatywnie można skorzystać z interfejsu użytkownika menedżera pakietów NuGet, wyszukując "IronXL.Excel" i klikając przycisk instalacji. Możesz także zainstalować poprzez .NET CLI za pomocą argumentów poleceń lub bezpośrednio z GitHuba.

Obie biblioteki są dostępne przez NuGet. Zauważ, że Excel Interop wymaga pełnej instalacji Microsoft Office, podczas gdy IronXL działa samodzielnie. Przed kontynuacją upewnij się, że twój system spełnia wymagania.

Tworzenie tabeli przestawnej Excel programowo z C# Interop

Oto kompletny przykład pokazujący, jak stworzyć tabelę przestawną programowo używając tradycyjnego podejścia Interop:

using Excel = Microsoft.Office.Interop.Excel;
class Program
{
    static void Main(string[] args)
    {
        // Create Excel application instance
        var excelApp = new Excel.Application();
        var workbook = excelApp.Workbooks.Add();
                    var dataSheet = (Excel.Worksheet)workbook.Worksheets[1];
            var pivotSheet = (Excel.Worksheet)workbook.Worksheets.Add();
            // Add header row and sample data
            dataSheet.Cells[1, 1] = "Product";
            dataSheet.Cells[1, 2] = "Region";
            dataSheet.Cells[1, 3] = "Sales";
            // ... populate data rows with values
            // Add sample data rows
            dataSheet.Cells[2, 1] = "Laptop";
            dataSheet.Cells[2, 2] = "North";
            dataSheet.Cells[2, 3] = 1200;
            dataSheet.Cells[3, 1] = "Laptop";
            dataSheet.Cells[3, 2] = "South";
            dataSheet.Cells[3, 3] = 1500;
            dataSheet.Cells[4, 1] = "Phone";
            dataSheet.Cells[4, 2] = "North";
            dataSheet.Cells[4, 3] = 800;
            dataSheet.Cells[5, 1] = "Phone";
            dataSheet.Cells[5, 2] = "South";
            dataSheet.Cells[5, 3] = 950;
            dataSheet.Cells[6, 1] = "Tablet";
            dataSheet.Cells[6, 2] = "East";
            dataSheet.Cells[6, 3] = 600;
            dataSheet.Cells[7, 1] = "Tablet";
            dataSheet.Cells[7, 2] = "West";
            dataSheet.Cells[7, 3] = 750;
            dataSheet.Cells[8, 1] = "Monitor";
            dataSheet.Cells[8, 2] = "North";
            dataSheet.Cells[8, 3] = 400;
            dataSheet.Cells[9, 1] = "Monitor";
            dataSheet.Cells[9, 2] = "South";
            dataSheet.Cells[9, 3] = 500;
            dataSheet.Cells[10, 1] = "Keyboard";
            dataSheet.Cells[10, 2] = "East";
            dataSheet.Cells[10, 3] = 300;
            // Create pivot cache from source data range
            Excel.Range dataRange = dataSheet.Range["A1:C10"];
            Excel.PivotCache pivotCache = workbook.PivotCaches().Create(
                Excel.XlPivotTableSourceType.xlDatabase, dataRange);
            // Create PivotTable at specific location
            Excel.PivotTables pivotTables = (Excel.PivotTables)pivotSheet.PivotTables();
            Excel.PivotTable pivotTable = pivotTables.Add(
                pivotCache, pivotSheet.Range["A3"], "SalesPivot");
            // Configure pivot table fields - row and column headers
            ((Excel.PivotField)pivotTable.PivotFields("Product")).Orientation =
                Excel.XlPivotFieldOrientation.xlRowField;
            ((Excel.PivotField)pivotTable.PivotFields("Region")).Orientation =
                Excel.XlPivotFieldOrientation.xlColumnField;
            ((Excel.PivotField)pivotTable.PivotFields("Sales")).Orientation =
                Excel.XlPivotFieldOrientation.xlDataField;
            // Configure grand totals and formatting
            pivotTable.RowGrand = true;
            pivotTable.ColumnGrand = true;
            // Save the Excel file
            workbook.SaveAs("pivot_interop.xlsx");
            workbook.Close();
            excelApp.Quit();
            // Critical: Release COM objects to avoid errors
            #if WINDOWS
            Marshal.ReleaseComObject(pivotTable);
            Marshal.ReleaseComObject(pivotSheet);
            Marshal.ReleaseComObject(dataSheet);
            Marshal.ReleaseComObject(workbook);
            Marshal.ReleaseComObject(excelApp);
            #endif
    }
}

Ten kod tworzy aplikację Excel, dodaje arkusz źródłowy z danymi zawierającymi wiersz nagłówka, ustanawia pamięć podręczną przestawną, buduje obiekt PivotTable i konfiguruje orientację pola. Sekcja oczyszczania jest krytyczna - brak zwolnienia obiektów COM powoduje wycieki pamięci. Każda komórka, zakres i arkusz muszą być właściwie usunięte, aby uniknąć błędów w czasie wykonywania.

Alternatywne podejście IronXL

IronXL przyjmuje inne podejście, pracując bezpośrednio z formatem pliku Excel. Oto jak osiągnąć podobne wyniki analizy programatycznie:

using IronXL;
using System.Linq;
class Program 
{
    static void Main(string[] args)
    {
        // Create workbook and add worksheet with data
        WorkBook workbook = WorkBook.Create();
        WorkSheet sheet = workbook.CreateWorkSheet("Data");
        // Add header row to define column structure
        sheet["A1"].Value = "Product";
        sheet["B1"].Value = "Region";
        sheet["C1"].Value = "Sales";
        // Add sample data to cells
        sheet["A2"].Value = "Widget";
        sheet["B2"].Value = "North";
        sheet["C2"].Value = 1500;
        // ... continue to add more data rows
        sheet["A3"].Value = "Laptop";
        sheet["B3"].Value = "South";
        sheet["C3"].Value = 1500;
        sheet["A4"].Value = "Phone";
        sheet["B4"].Value = "North";
        sheet["C4"].Value = 800;
        sheet["A5"].Value = "Phone";
        sheet["B5"].Value = "South";
        sheet["C5"].Value = 950;
        sheet["A6"].Value = "Tablet";
        sheet["B6"].Value = "East";
        sheet["C6"].Value = 600;
        sheet["A7"].Value = "Tablet";
        sheet["B7"].Value = "West";
        sheet["C7"].Value = 750;
        sheet["A8"].Value = "Monitor";
        sheet["B8"].Value = "North";
        sheet["C8"].Value = 400;
        sheet["A9"].Value = "Monitor";
        sheet["B9"].Value = "South";
        sheet["C9"].Value = 500;
        sheet["A10"].Value = "Keyboard";
        sheet["B10"].Value = "East";
        sheet["C10"].Value = 300;
        // Create summary analysis worksheet
        var summarySheet = workbook.CreateWorkSheet("Summary");
        // Group and calculate aggregated data
        var data = sheet["A1:C10"].ToDataTable(true);
        var productSummary = data.AsEnumerable()
            .GroupBy(row => row.Field<string>("Product"))
            .Select((group, index) => new {
                Product = group.Key,
                TotalSales = group.Sum(r => Convert.ToDecimal(r["Sales"])),
                Count = group.Count(),
                RowIndex = index + 2
            });
        // Write column headers for summary
        summarySheet["A1"].Value = "Product Summary";
        summarySheet["A2"].Value = "Product";
        summarySheet["B2"].Value = "Total Sales";
        summarySheet["C2"].Value = "Count";
        // Export results to cells
        foreach (var item in productSummary)
        {
            summarySheet[$"A{item.RowIndex + 1}"].Value = item.Product;
            summarySheet[$"B{item.RowIndex + 1}"].Value = item.TotalSales;
            summarySheet[$"C{item.RowIndex + 1}"].Value = item.Count;
        }
        // Apply number formatting and style
        summarySheet["B:B"].FormatString = "$#,##0.00";
        // Save the xlsx file
        workbook.SaveAs("analysis_ironxl.xlsx");
    }
}

Ten przykład IronXL demonstruje, jak stworzyć skoroszyt, dodać arkusze, wypełnić komórki danymi i wykonać analizę agregacji. Kod grupuje dane według produktu i kalkuluje sumy oraz liczność, tworząc raport podsumowujący. Nie ma potrzeby zarządzania obiektami COM, a metody to proste .NET kolekcje, które automatycznie zarządzają pamięcią.

Wynik

Jak utworzyć tabelę przestawną Excel w C#: Rysunek 6 - Wyjście IronXL

Jak utworzyć tabelę przestawną Excel w C#: Rysunek 7 - Wydruk podsumowania

Kluczowe różnice i uwagi

Wymagania dotyczące wdrożenia

Excel Interop wymaga:

  • Instalacji Microsoft Excel z ważną licencją

  • Systemu operacyjnego Windows

  • Prawidłowych uprawnień i ustawień COM

  • Konfiguracji serwera dla automatyzacji Office IronXL wymaga:

  • Tylko pakietu biblioteki IronXL

  • Działa na każdej platformie wspierającej .NET

  • Brak potrzeby instalacji lub licencji Office

  • Uproszczony proces wdrażania

Jak utworzyć tabelę przestawną Excel w C#: Rysunek 8 - Funkcje

Jakość kodu i utrzymanie

Interop wymaga ostrożnego zarządzania obiektami COM, aby uniknąć wycieków pamięci i błędów. Każdy stworzony obiekt Excel musi być jawnie zwolniony odpowiednimi metodami. IronXL używa standardowych obiektów .NET z automatycznym zarządzaniem pamięcią, co zmniejsza ryzyko problemów z zasobami.

Obsługa błędów

Z Interop, błędy często wiążą się z dostępnością Excel, różnicami wersji lub awariami COM. Błędy IronXL to standardowe wyjątki .NET, co ułatwia debugowanie. Możesz polegać na znajomych wzorcach try-catch bez obaw o specyficzne dla COM problemy.

Najlepsze praktyki i rekomendacje

Wybierz Excel Interop, gdy:

  • Potrzebujesz dokładnych funkcji tabeli przestawnej Excel ze wszystkimi opcjami formatowania

  • Excel jest gwarantowany do dostępności w systemie

  • Praca tylko na aplikacjach desktopowych w Windows

  • Wymagania dotyczące kodu dziedzictwa Wybierz IronXL, gdy:

  • Budowanie aplikacji serwerowych lub rozwiązań webowych

  • Wymaganie kompatybilności wieloplatformowej

  • Potrzeba niezawodnej wydajności bez nadmiaru COM

  • Wdrażanie w kontenery lub środowiska chmurowe

Odwiedź dokumentację IronXL aby poznać więcej szczegółów na temat implementacji. W przypadku pytań lub wsparcia, skontaktuj się z zespołem Iron Software.

Wnioski

Choć C# Interop zapewnia bezpośredni dostęp do funkcji tworzenia tabeli przestawnej w Excelu, wiąże się z ograniczeniami wdrożeniowymi i złożonością. IronXL oferuje nowoczesną alternatywę, która upraszcza manipulację plikami Excel, jednocześnie zapewniając elastyczność działania wszędzie tam, gdzie wspierany jest .NET.

Dla deweloperów budujących nowe aplikacje lub modernizujących istniejące rozwiązania, podejście IronXL eliminuje nadmiar COM Interop, jednocześnie zapewniając potężne możliwości manipulacji danymi. Niezależnie od tego, czy potrzebujesz odczytać, edytować, czy eksportować dane Excel, IronXL dostarcza czystsze rozwiązanie.

Rozpocznij z bezpłatną wersją próbną IronXL aby doświadczyć różnicy, lub przeglądaj samouczki, aby zobaczyć więcej przykładów. Gotowy do wdrożenia? Zobacz opcje licencyjne aby wybrać odpowiedni pakiet dla swojego zadania.

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