Zum Fußzeileninhalt springen
IRONXL VERWENDEN

Wie man eine Excel Pivot-Tabelle in C# erstellt

Die Arbeit mit einer Excel-Pivottabelle programmatisch ist ein häufiges Erfordernis in Geschäftsanwendungen, die Quelldaten analysieren und berechnen müssen. Während Microsofts Excel Interop die traditionelle Methode war, eine Pivottabelle in einer Excel-Datei zu erstellen, bieten moderne Lösungen wie IronXL erhebliche Vorteile. Dieser Leitfaden beschreibt beide Methoden mit praktischen Beispielen, um Ihnen bei der Erstellung einer Pivottabelle in Excel mit C# Interop zu helfen oder eine bessere Alternative zu wählen.

Verständnis der zwei Ansätze

Was ist Excel Interop?

Excel Interop verwendet COM (Component Object Model), um Microsoft Excel direkt über C# zu steuern. Es erfordert eine Office-Installation auf dem System und automatisiert Excel im Wesentlichen so, als ob ein Benutzer mit der Anwendung interagiert. Jedes Arbeitsblatt, jede Arbeitsmappe und jede Zelle wird damit zu einem Objekt, das Sie über Code manipulieren können.

Was ist IronXL?

IronXL ist eine eigenständige .NET-Bibliothek, die Excel-Dateien lesen, bearbeiten und erstellen kann, ohne Microsoft Office zu benötigen. Es funktioniert auf Windows, Linux, macOS und Docker-Containern, was es ideal für moderne Bereitstellungsszenarien macht. Sie können Daten öffnen, speichern und exportieren, ohne den Overhead von COM Interop.

Einrichten Ihrer Umgebung

Für Excel Interop

Install-Package Microsoft.Office.Interop.Excel

Für IronXL

Install-Package IronXL.Excel

Alternativ können Sie den NuGet-Paket-Manager-UI verwenden, indem Sie nach „IronXL.Excel“ suchen und auf Installieren klicken. Sie können auch über die .NET CLI mit Befehlsargumenten installieren oder es direkt von GitHub referenzieren.

Beide Bibliotheken sind über NuGet verfügbar. Beachten Sie, dass Excel Interop eine vollständige Microsoft Office-Installation erfordert, während IronXL unabhängig arbeitet. Bevor Sie fortfahren, stellen Sie sicher, dass Ihr System die Anforderungen erfüllt.

Erstellen einer Excel-Pivottabelle programmatisch mit C# Interop

Hier ist ein vollständiges Beispiel, das zeigt, wie man mit dem traditionellen Interop-Ansatz programmatisch eine Pivottabelle erstellt:

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
    }
}
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
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Dieser Code erstellt eine Excel-Anwendung, fügt ein Arbeitsblatt mit Quelldaten einschließlich einer Kopfzeile hinzu, erstellt einen Pivot-Cache, baut das PivotTable-Objekt und konfiguriert die Feldausrichtung. Der Bereinigungsteil ist entscheidend - das Versäumnis, COM-Objekte freizugeben, verursacht Speicherlecks. Jede Zelle, jeder Bereich und jedes Arbeitsblatt muss ordnungsgemäß entsorgt werden, um Laufzeitfehler zu vermeiden.

Der IronXL-Alternative

IronXL verfolgt einen anderen Ansatz, indem es direkt mit dem Excel-Dateiformat arbeitet. So erreichen Sie ähnliche Analysenergebnisse programmatisch:

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");
    }
}
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");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Dieses IronXL-Beispiel zeigt, wie man eine Arbeitsmappe erstellt, Arbeitsblätter hinzufügt, Zellen mit Daten füllt und Aggregationsanalysen durchführt. Der Code gruppiert Daten nach Produkt und berechnet Summen und Zählungen, indem er einen Zusammenfassungsbericht erstellt. Es müssen keine COM-Objekte verwaltet werden, und die Methoden sind einfache .NET-Sammlungen, die automatisch den Speicher verwalten.

Ausgabe

Wie man eine Excel-Pivottabelle in C# erstellt: Abbildung 6 - IronXL-Ausgabe

Wie man eine Excel-Pivottabelle in C# erstellt: Abbildung 7 - Zusammenfassungsausgabe

Wichtige Unterschiede und Überlegungen

Bereitstellungsanforderungen

Excel Interop erfordert:

  • Microsoft Excel-Installation mit einer gültigen Lizenz
  • Windows-Betriebssystem
  • Ordentliche COM-Berechtigungen und -Einstellungen
  • Serverkonfiguration für Office-Automatisierung IronXL erfordert:

  • Nur das IronXL-Bibliothekspaket
  • Funktioniert auf jeder Plattform, die .NET unterstützt
  • Keine Office-Installation oder Lizenz erforderlich
  • Vereinfachter Bereitstellungsprozess

Wie man eine Excel-Pivottabelle in C# erstellt: Abbildung 8 - Funktionen

Codequalität und Wartung

Interop umfasst das sorgfältige Verwalten von COM-Objekten, um Speicherlecks und Fehler zu vermeiden. Jedes erstellte Excel-Objekt muss explizit über die richtigen Methoden freigegeben werden. IronXL verwendet Standard-.NET-Objekte mit automatischer Garbage Collection, was das Risiko von Ressourcenproblemen reduziert.

Fehlerbehandlung

Mit Interop hängen Fehler oft mit der Verfügbarkeit von Excel, Versionsunterschieden oder COM-Ausfällen zusammen. IronXL-Fehler sind Standard-.NET-Ausnahmen, was das Debuggen erleichtert. Sie können sich auf vertraute try-catch-Muster verlassen, ohne sich mit COM-spezifischen Problemen auseinanderzusetzen.

Beste Praktiken und Empfehlungen

Wählen Sie Excel Interop, wenn:

  • Sie genaue Excel-Pivottabellenfunktionen mit allen Formatierungsoptionen benötigen
  • Excel auf dem System garantiert verfügbar ist
  • Nur an Windows-Desktopanwendungen arbeiten
  • Anforderungen an legacy code vorhanden sind Wählen Sie IronXL, wenn:

  • Serveranwendungen oder Weblösungen erstellt werden
  • Plattformübergreifende Kompatibilität erforderlich ist
  • Zuverlässige Leistung ohne COM-Overhead benötigt wird
  • Bereitstellung in Containern oder Cloud-Umgebungen erfolgt

Besuchen Sie IronXL-Dokumentation, um mehr Details über die Implementierung zu erfahren. Für Fragen oder Unterstützung, kontaktieren Sie das Iron Software-Team.

Abschluss

Während C# Interop direkten Zugriff auf die Erstellung von Pivot-Tabellen in Excel bietet, bringt es Bereitstellungseinschränkungen und Komplexität mit sich. IronXL bietet eine moderne Alternative, die die Manipulation von Excel-Dateien vereinfacht und die Flexibilität bietet, überall zu laufen, wo .NET unterstützt wird.

Für Entwickler, die neue Anwendungen erstellen oder bestehende Lösungen modernisieren, beseitigt der Ansatz von IronXL den COM-Interop-Overhead und bietet leistungsstarke Datenmanipulationsfunktionen. Ob Sie Daten in Excel lesen, bearbeiten oder exportieren müssen, IronXL liefert eine sauberere Lösung.

Starten Sie mit IronXLs kostenloser Testversion, um den Unterschied zu erleben oder erkunden Sie Tutorials, um weitere Beispiele zu sehen. Bereit zur Bereitstellung? Sehen Sie sich die Lizenzierungsoptionen an, um das richtige Paket für Ihre Aufgabe zu wählen.

Wie man eine Excel-Pivottabelle in C# erstellt: Abbildung 9 - Lizenzierung

Häufig gestellte Fragen

Was ist der Vorteil von IronXL gegenüber Excel Interop bei der Erstellung von Pivot-Tabellen?

IronXL bietet erhebliche Vorteile gegenüber Excel Interop, darunter Benutzerfreundlichkeit, bessere Leistung und die Möglichkeit, Pivot-Tabellen zu erstellen, ohne Excel auf dem Server installieren zu müssen.

Kann ich eine Excel-Pivot-Tabelle in C# ohne Excel Interop erstellen?

Ja, Sie können eine Excel-Pivot-Tabelle in C# mit IronXL erstellen, das eine moderne und effiziente Alternative zu Excel Interop bietet.

Ist es notwendig, dass Microsoft Excel installiert ist, um IronXL zu verwenden?

Nein, IronXL erfordert nicht, dass Microsoft Excel auf Ihrem System installiert ist, was es zu einer flexiblen Lösung für die Erstellung und Verwaltung von Excel-Dateien macht.

Welche Schritte sind erforderlich, um eine Pivot-Tabelle in Excel mit IronXL zu erstellen?

Um eine Pivot-Tabelle mit IronXL zu erstellen, laden Sie zunächst Ihre Excel-Datei, spezifizieren Sie den Datenbereich, definieren Sie Ihre Pivot-Tabellenfelder und generieren dann die Pivot-Tabelle. IronXL's umfassende API macht diesen Prozess einfach.

Unterstützt IronXL neben Pivot-Tabellen auch andere Excel-Funktionalitäten?

Ja, IronXL unterstützt eine Vielzahl von Excel-Funktionalitäten, darunter das Lesen und Schreiben von Excel-Dateien, das Formatieren von Zellen und das Durchführen von Berechnungen, unter anderem.

Wie geht IronXL mit großen Datensätzen um, wenn Pivot-Tabellen erstellt werden?

IronXL ist darauf ausgelegt, große Datensätze effizient zu verarbeiten, was eine schnelle und zuverlässige Erstellung von Pivot-Tabellen auch bei umfangreichen Daten gewährleistet.

Kann IronXL in cloudbasierten Anwendungen verwendet werden?

Ja, IronXL kann in cloudbasierten Anwendungen integriert werden und bietet eine nahtlose Lösung für die Verwaltung von Excel-Dateien in der Cloud.

Welche Programmiersprachen werden von IronXL für die Erstellung von Pivot-Tabellen unterstützt?

IronXL unterstützt hauptsächlich C#, was die Erstellung von Pivot-Tabellen und die Durchführung anderer Excel-Operationen innerhalb von .NET-Anwendungen erleichtert.

Gibt es Tutorials zum Erlernen der Nutzung von IronXL?

Ja, Iron Software bietet umfassende Dokumentationen und Tutorials auf ihrer Website, um Benutzern zu helfen, effektiv zu lernen, wie man IronXL verwendet.

Welche Lizenzierungsoptionen gibt es für IronXL?

IronXL bietet verschiedene Lizenzierungsoptionen, einschließlich kostenloser und kostenpflichtiger Stufen, um unterschiedliche Projektanforderungen und Skalen zu berücksichtigen.

Jordi Bardia
Software Ingenieur
Jordi ist am besten in Python, C# und C++ versiert. Wenn er nicht bei Iron Software seine Fähigkeiten einsetzt, programmiert er Spiele. Mit Verantwortung für Produkttests, Produktentwicklung und -forschung trägt Jordi mit immensem Wert zur kontinuierlichen Produktverbesserung bei. Die abwechslungsreiche Erfahrung hält ihn gefordert und engagiert, ...
Weiterlesen