Wie man eine Excel-Datei in C# erstellt

How to Create an Excel File in C# (.NET Tutorial)

This article was translated from English: Does it need improvement?
Translated
View the article in English

Die meisten Teams, mit denen ich arbeite, müssen Excel-Dateien genauso oft generieren, wie sie sie lesen: Rechnungen, Exporte, monatliche Berichte, die das Finanzteam öffnen und filtern kann. Ich habe diesen Ablauf Dutzende Male in Konsolen-Apps, ASP.NET-Diensten und Hintergrundprozessen erstellt. Die API von IronXL ist der Arbeitsweise von Excel selbst so ähnlich, dass der Code fast wie eine Spezifikation liest. Es gibt jedoch einige Formatierungs- und Speicherentscheidungen, die wichtiger sind, als die API-Oberfläche vermuten lässt. Dieser Leitfaden beschreibt, wie ich tatsächlich XLSX-Dateien in der Produktion generiere, einschließlich der Stolpersteine, die mir beim ersten Mal Zeit gekostet haben.

Die Bibliothek läuft auf .NET 8, .NET 9, .NET Core und .NET Framework, auf Windows, Linux, macOS, Azure und AWS, ohne dass Microsoft Office auf dem Host erforderlich ist. Die untenstehenden Codepfade sind über alle diese Ziele hinweg gleich.

Schnellstart: Erstellen einer Excel-Datei

Drei Zeilen stellen eine neue Arbeitsmappe auf, schreiben einen Wert in A1 und speichern die Datei auf Festplatte. Kein Excel-Prozess beteiligt, kein COM-Marshaling.

  1. Installieren Sie IronXL mit NuGet Package Manager

    PM > Install-Package IronXL.Excel
  2. Kopieren Sie diesen Codeausschnitt und führen Sie ihn aus.

    WorkBook book = IronXL.WorkBook.Create(IronXL.ExcelFileFormat.XLSX); book.CreateWorkSheet("Sheet1")["A1"].Value = "Hello World"; book.SaveAs("MyFile.xlsx");
  3. Bereitstellen zum Testen in Ihrer Live-Umgebung

    Beginnen Sie noch heute, IronXL in Ihrem Projekt zu verwenden, mit einer kostenlosen Testversion

    arrow pointer

Was ist IronXL und warum sollte man es zur Erstellung von Excel-Dateien verwenden?

IronXL ist eine C# und VB.NET Excel API zum Lesen, Bearbeiten und Erstellen von Tabellenkalkulationsdateien. Es erfordert weder Microsoft Office noch Excel Interop, wodurch die Bereitstellung auf einen NuGet-Verweis und eine using Direktive reduziert wird.

IronXL unterstützt vollständig .NET 9, .NET 8, .NET Core, .NET Framework, Xamarin, Mobile, Linux, macOS und Azure-Umgebungen.

IronXL Features

  • Menschlicher Support direkt von unserem .NET-Entwicklungsteam
  • Schnelle Installation mit Microsoft Visual Studio
  • KOSTENLOS für die Entwicklung. Lizenzen von $999

Wie kann ich schnell eine Excel-Datei erstellen und speichern?

Installieren Sie IronXL über NuGet oder laden Sie die DLL direkt herunter. Die Klasse WorkBook ist der Einstiegspunkt für alle Excel-Operationen, und die Klasse WorkSheet stellt Methoden zur Verfügung, um einzelne Tabellenblätter zu manipulieren. Die vollständige Schritt-für-Schritt-Anleitung beginnt unten bei Schritt 1.


How Do I Install the IronXL C# Library?

Installieren Sie IronXL über den NuGet-Paketmanager in Visual Studio oder verwenden Sie die Paket-Manager-Konsole:

Install-Package IronXL.Excel

Sie können über das Menü "Projekt" oder per Rechtsklick auf Ihr Projekt im Projektmappen-Explorer auf den NuGet-Paket-Manager zugreifen.

Visual Studio-Projektmenü zeigt die Option 'NuGet-Packages verwalten' Abbildung 3 - Zugriff auf den NuGet-Paketmanager über das Projekmenü

Lösungsexplorer-Kontextmenü zeigt die Option 'NuGet-Packages verwalten' Abbildung 4 - Rechtsklick-Kontextmenü im Lösungs-Explorer

Suchen Sie im Paketlisten nach IronXL.Excel und klicken Sie auf Installieren.


NuGet-Paket-Manager zeigt das IronXL.Excel Paket zur Installation bereit Abbildung 5 - IronXL.Excel über den NuGet-Paketmanager installieren

Alternativ können Sie die IronXL DLL direkt herunterladen und sie als Referenz zu Ihrem Projekt über den Projektmappen-Explorer > Referenzen > Suchen nach IronXL.dll hinzufügen.

IronXL-Website-Download-Seite zeigt Installationsanweisungen und Download-Button Abbildung 6 - IronXL-Bibliothek von der offiziellen Webseite herunterladen

Hinweis:IronXL benötigt keine Microsoft Office oder Excel Interop-Installation. Es läuft auf jeder von .NET unterstützten Plattform, einschließlich Windows, Linux, macOS und Cloud-Umgebungen.)}


Wie richte ich mein .NET-Projekt ein?

IronXL funktioniert mit jedem .NET-Projekttyp: Konsolenanwendungen, ASP.NET-Webanwendungen, APIs oder Desktop-Tools. Das folgende Beispiel verwendet eine ASP.NET-Webanwendung, aber die gleichen Codepfade funktionieren in allen Projektschablonen.

Folgen Sie diesen Schritten, um eine ASP.NET-Website zu erstellen:

  1. Öffnen Sie Visual Studio
  2. Klicken Sie auf Datei > Neues Projekt
  3. Wählen Sie 'Web' unter Visual C# in der Projekttypenliste
  4. Wählen Sie 'ASP.NET-Webanwendung'


    Visual Studio Dialogfeld "Neues Projekt" mit ausgewählter ASP.NET-Webanwendung

    Abbildung 1Create new ASP.NET project

  5. Klicken Sie 'OK'
  6. Wählen Sie das Webforms-Template

    Auswahl einer ASP.NET-Projektvorlage mit der Option Web Forms

    Abbildung 2Select Web Forms template

  7. Klicken Sie 'OK'

Mit Ihrem Projekt bereit, installieren Sie IronXL, um Excel-Dateien programmatisch zu erstellen.


How Do I Create an Excel Workbook in C#?

Ein neues Arbeitsbuch ist ein einzelner Aufruf von WorkBook.Create, wobei das Dateiformat als Enum übergeben wird:

:path=/static-assets/excel/content-code-examples/tutorials/create-excel-file-net-3.cs
WorkSheet workSheet = workBook.CreateWorkSheet("2020 Budget");
Dim workSheet As WorkSheet = workBook.CreateWorkSheet("2020 Budget")
$vbLabelText   $csharpLabel

Die Methode Create unterstützt sowohl XLS (Excel 97-2003) als auch XLSX (Excel 2007+) Formate. XLSX wird für eine bessere Leistung und kleinere Dateigrößen empfohlen.

  • XLSX : Empfohlen für alle modernen Excel-Versionen (2007+) – kleinere Dateien, bessere Leistung
  • XLS : Älteres Format zur Kompatibilität mit Excel 97–2003

Wie füge ich ein Arbeitsblatt zu meiner Arbeitsmappe hinzu?

Fügen Sie Tabellenblätter über CreateWorkSheet hinzu:

:path=/static-assets/excel/content-code-examples/tutorials/create-excel-file-net-4.cs
workSheet["A1"].Value = "January";
workSheet["B1"].Value = "February";
workSheet["C1"].Value = "March";
workSheet["D1"].Value = "April";
workSheet["E1"].Value = "May";
workSheet["F1"].Value = "June";
workSheet["G1"].Value = "July";
workSheet["H1"].Value = "August";
workSheet["I1"].Value = "September";
workSheet["J1"].Value = "October";
workSheet["K1"].Value = "November";
workSheet["L1"].Value = "December";
workSheet("A1").Value = "January"
workSheet("B1").Value = "February"
workSheet("C1").Value = "March"
workSheet("D1").Value = "April"
workSheet("E1").Value = "May"
workSheet("F1").Value = "June"
workSheet("G1").Value = "July"
workSheet("H1").Value = "August"
workSheet("I1").Value = "September"
workSheet("J1").Value = "October"
workSheet("K1").Value = "November"
workSheet("L1").Value = "December"
$vbLabelText   $csharpLabel

Eine Arbeitsmappe enthält ein oder mehrere Arbeitsblätter. Jedes Arbeitsblatt besteht aus Zeilen und Spalten, mit Zellen an ihren Schnittstellen. Verwenden Sie die Methode CreateWorkSheet, um neue Tabellenblätter zu Ihrem Arbeitsbuch hinzuzufügen.

  • WorkBook.CreateWorkSheet(String): Fügt ein neues Blatt mit dem angegebenen Tabnamen hinzu
  • WorkSheet: Ruft ein bestehendes Blatt nach Name ab
  • Die Tabellennamen müssen innerhalb einer Arbeitsmappe eindeutig sein.

Wie lege ich Zellwerte in Excel fest?

Wie kann ich Zellenwerte manuell festlegen?

Der Zugriff auf Zellen erfolgt mit den gleichen Adressstrings im A1-Stil, die Sie in Excel sehen:

:path=/static-assets/excel/content-code-examples/tutorials/create-excel-file-net-5.cs
Random r = new Random();
for (int i = 2 ; i <= 11 ; i++)
{
    workSheet["A" + i].Value = r.Next(1, 1000);
    workSheet["B" + i].Value = r.Next(1000, 2000);
    workSheet["C" + i].Value = r.Next(2000, 3000);
    workSheet["D" + i].Value = r.Next(3000, 4000);
    workSheet["E" + i].Value = r.Next(4000, 5000);
    workSheet["F" + i].Value = r.Next(5000, 6000);
    workSheet["G" + i].Value = r.Next(6000, 7000);
    workSheet["H" + i].Value = r.Next(7000, 8000);
    workSheet["I" + i].Value = r.Next(8000, 9000);
    workSheet["J" + i].Value = r.Next(9000, 10000);
    workSheet["K" + i].Value = r.Next(10000, 11000);
    workSheet["L" + i].Value = r.Next(11000, 12000);
}
Dim r As New Random()
For i As Integer = 2 To 11
	workSheet("A" & i).Value = r.Next(1, 1000)
	workSheet("B" & i).Value = r.Next(1000, 2000)
	workSheet("C" & i).Value = r.Next(2000, 3000)
	workSheet("D" & i).Value = r.Next(3000, 4000)
	workSheet("E" & i).Value = r.Next(4000, 5000)
	workSheet("F" & i).Value = r.Next(5000, 6000)
	workSheet("G" & i).Value = r.Next(6000, 7000)
	workSheet("H" & i).Value = r.Next(7000, 8000)
	workSheet("I" & i).Value = r.Next(8000, 9000)
	workSheet("J" & i).Value = r.Next(9000, 10000)
	workSheet("K" & i).Value = r.Next(10000, 11000)
	workSheet("L" & i).Value = r.Next(11000, 12000)
Next i
$vbLabelText   $csharpLabel

Die Eigenschaft Value akzeptiert verschiedene Datentypen, einschließlich Zeichenketten, Zahlen, Daten und Booleans. IronXL formatiert Zellen automatisch basierend auf dem Datentyp.

Wie kann ich Zellenwerte dynamisch festlegen?

Wenn die Anzahl der Zeilen zur Laufzeit bekannt ist, macht die Zeichenfolgeninterpolation den Schleifenkörper leicht lesbar:

// Initialize random number generator for sample data
Random r = new Random();

// Populate cells with random budget data for each month
for (int i = 2; i <= 11; i++)
{
    // Set different budget categories with increasing ranges
    workSheet[$"A{i}"].Value = r.Next(1, 1000);     // Office Supplies
    workSheet[$"B{i}"].Value = r.Next(1000, 2000);  // Utilities
    workSheet[$"C{i}"].Value = r.Next(2000, 3000);  // Rent
    workSheet[$"D{i}"].Value = r.Next(3000, 4000);  // Salaries
    workSheet[$"E{i}"].Value = r.Next(4000, 5000);  // Marketing
    workSheet[$"F{i}"].Value = r.Next(5000, 6000);  // IT Services
    workSheet[$"G{i}"].Value = r.Next(6000, 7000);  // Travel
    workSheet[$"H{i}"].Value = r.Next(7000, 8000);  // Training
    workSheet[$"I{i}"].Value = r.Next(8000, 9000);  // Insurance
    workSheet[$"J{i}"].Value = r.Next(9000, 10000); // Equipment
    workSheet[$"K{i}"].Value = r.Next(10000, 11000); // Research
    workSheet[$"L{i}"].Value = r.Next(11000, 12000); // Misc
}

// Alternative: Set range of cells with same value
workSheet["A13:L13"].Value = 0; // Initialize totals row
// Initialize random number generator for sample data
Random r = new Random();

// Populate cells with random budget data for each month
for (int i = 2; i <= 11; i++)
{
    // Set different budget categories with increasing ranges
    workSheet[$"A{i}"].Value = r.Next(1, 1000);     // Office Supplies
    workSheet[$"B{i}"].Value = r.Next(1000, 2000);  // Utilities
    workSheet[$"C{i}"].Value = r.Next(2000, 3000);  // Rent
    workSheet[$"D{i}"].Value = r.Next(3000, 4000);  // Salaries
    workSheet[$"E{i}"].Value = r.Next(4000, 5000);  // Marketing
    workSheet[$"F{i}"].Value = r.Next(5000, 6000);  // IT Services
    workSheet[$"G{i}"].Value = r.Next(6000, 7000);  // Travel
    workSheet[$"H{i}"].Value = r.Next(7000, 8000);  // Training
    workSheet[$"I{i}"].Value = r.Next(8000, 9000);  // Insurance
    workSheet[$"J{i}"].Value = r.Next(9000, 10000); // Equipment
    workSheet[$"K{i}"].Value = r.Next(10000, 11000); // Research
    workSheet[$"L{i}"].Value = r.Next(11000, 12000); // Misc
}

// Alternative: Set range of cells with same value
workSheet["A13:L13"].Value = 0; // Initialize totals row
' Initialize random number generator for sample data
Dim r As New Random()

' Populate cells with random budget data for each month
For i As Integer = 2 To 11
	' Set different budget categories with increasing ranges
	workSheet($"A{i}").Value = r.Next(1, 1000) ' Office Supplies
	workSheet($"B{i}").Value = r.Next(1000, 2000) ' Utilities
	workSheet($"C{i}").Value = r.Next(2000, 3000) ' Rent
	workSheet($"D{i}").Value = r.Next(3000, 4000) ' Salaries
	workSheet($"E{i}").Value = r.Next(4000, 5000) ' Marketing
	workSheet($"F{i}").Value = r.Next(5000, 6000) ' IT Services
	workSheet($"G{i}").Value = r.Next(6000, 7000) ' Travel
	workSheet($"H{i}").Value = r.Next(7000, 8000) ' Training
	workSheet($"I{i}").Value = r.Next(8000, 9000) ' Insurance
	workSheet($"J{i}").Value = r.Next(9000, 10000) ' Equipment
	workSheet($"K{i}").Value = r.Next(10000, 11000) ' Research
	workSheet($"L{i}").Value = r.Next(11000, 12000) ' Misc
Next i

' Alternative: Set range of cells with same value
workSheet("A13:L13").Value = 0 ' Initialize totals row
$vbLabelText   $csharpLabel

String-Interpolation ($"...") macht es einfach, auf Zellen dynamisch zu verweisen. Der Indexer Item unterstützt sowohl einzelne Zellen als auch Bereiche.

Wie kann ich Daten aus einer Datenbank in eine Excel-Tabelle übertragen?

Das Laden von Daten aus Datenbanken in Excel ist eine häufige Anforderung:

:path=/static-assets/excel/content-code-examples/tutorials/create-excel-file-net-7.cs
workSheet["A1:L1"].Style.SetBackgroundColor("#d3d3d3");
workSheet("A1:L1").Style.SetBackgroundColor("#d3d3d3")
$vbLabelText   $csharpLabel

Dieses Beispiel zeigt das Lesen von Excel-Daten aus Datenbanken, das Anwenden von Formatierungen und die Verwendung von Formeln für Berechnungen. Die Eigenschaft NumberFormat ermöglicht benutzerdefiniertes Zahlenformatieren wie in Excel.


Wie formatiere ich Excel-Zellen?

Wie kann ich in Excel Hintergrundfarben festlegen?

Hintergründe, abwechselnde Zeilenfarben und Schriftfarben-Überschreibungen erfolgen alle über das Objekt Style auf einer Zelle oder einem Bereich:

// Set header row background to light gray using hex color
workSheet["A1:L1"].Style.SetBackgroundColor("#d3d3d3");

// Apply different colors for data categorization
workSheet["A2:A11"].Style.SetBackgroundColor("#E7F3FF"); // Light blue for January
workSheet["B2:B11"].Style.SetBackgroundColor("#FFF2CC"); // Light yellow for February

// Highlight important cells with bold colors
workSheet["L12"].Style.SetBackgroundColor("#FF0000"); // Red for totals
workSheet["L12"].Style.Font.FontColor = "#FFFFFF"; // White text

// Create alternating row colors for better readability
for (int row = 2; row <= 11; row++)
{
    if (row % 2 == 0)
    {
        workSheet[$"A{row}:L{row}"].Style.SetBackgroundColor("#F2F2F2");
    }
}
// Set header row background to light gray using hex color
workSheet["A1:L1"].Style.SetBackgroundColor("#d3d3d3");

// Apply different colors for data categorization
workSheet["A2:A11"].Style.SetBackgroundColor("#E7F3FF"); // Light blue for January
workSheet["B2:B11"].Style.SetBackgroundColor("#FFF2CC"); // Light yellow for February

// Highlight important cells with bold colors
workSheet["L12"].Style.SetBackgroundColor("#FF0000"); // Red for totals
workSheet["L12"].Style.Font.FontColor = "#FFFFFF"; // White text

// Create alternating row colors for better readability
for (int row = 2; row <= 11; row++)
{
    if (row % 2 == 0)
    {
        workSheet[$"A{row}:L{row}"].Style.SetBackgroundColor("#F2F2F2");
    }
}
' Set header row background to light gray using hex color
workSheet("A1:L1").Style.SetBackgroundColor("#d3d3d3")

' Apply different colors for data categorization
workSheet("A2:A11").Style.SetBackgroundColor("#E7F3FF") ' Light blue for January
workSheet("B2:B11").Style.SetBackgroundColor("#FFF2CC") ' Light yellow for February

' Highlight important cells with bold colors
workSheet("L12").Style.SetBackgroundColor("#FF0000") ' Red for totals
workSheet("L12").Style.Font.FontColor = "#FFFFFF" ' White text

' Create alternating row colors for better readability
For row As Integer = 2 To 11
	If row Mod 2 = 0 Then
		workSheet($"A{row}:L{row}").Style.SetBackgroundColor("#F2F2F2")
	End If
Next row
$vbLabelText   $csharpLabel

Die Methode SetBackgroundColor akzeptiert Hex-Farbcode. Kombinieren Sie Hintergrundfarben mit Font.FontColor, um den Kontrast bei dunkleren Füllungen lesbar zu halten.

Wie erstelle ich Rahmen in Excel?

Rahmen helfen, Datenregionen zu definieren und die Struktur zu verbessern:

:path=/static-assets/excel/content-code-examples/tutorials/create-excel-file-net-9.cs
// Use IronXL built-in aggregations
decimal sum = workSheet["A2:A11"].Sum();
decimal avg = workSheet["B2:B11"].Avg();
decimal max = workSheet["C2:C11"].Max();
decimal min = workSheet["D2:D11"].Min();

// Assign value to cells
workSheet["A12"].Value = sum;
workSheet["B12"].Value = avg;
workSheet["C12"].Value = max;
workSheet["D12"].Value = min;
' Use IronXL built-in aggregations
Dim sum As Decimal = workSheet("A2:A11").Sum()
Dim avg As Decimal = workSheet("B2:B11").Avg()
Dim max As Decimal = workSheet("C2:C11").Max()
Dim min As Decimal = workSheet("D2:D11").Min()

' Assign value to cells
workSheet("A12").Value = sum
workSheet("B12").Value = avg
workSheet("C12").Value = max
workSheet("D12").Value = min
$vbLabelText   $csharpLabel

IronXL unterstützt verschiedene Rahmentypen, darunter Dünn, Mittel, Dick, Doppel, Gepunktet und Gestichelt. Jede Rahmenseite kann unabhängig voneinander gestylt werden.


How Do I Use Excel Formulas in C#?

IronXL wertet Excel-Formeln zu Schreibzeiten aus, sodass die Werte sofort nach dem Speichern der Arbeitsmappe korrekt sind:

// Use built-in aggregation functions for ranges
decimal sum = workSheet["A2:A11"].Sum();
decimal avg = workSheet["B2:B11"].Avg();
decimal max = workSheet["C2:C11"].Max();
decimal min = workSheet["D2:D11"].Min();

// Assign calculated values to cells
workSheet["A12"].Value = sum;
workSheet["B12"].Value = avg;
workSheet["C12"].Value = max;
workSheet["D12"].Value = min;

// Or use Excel formulas directly
workSheet["A12"].Formula = "=SUM(A2:A11)";
workSheet["B12"].Formula = "=AVERAGE(B2:B11)";
workSheet["C12"].Formula = "=MAX(C2:C11)";
workSheet["D12"].Formula = "=MIN(D2:D11)";

// Complex formulas with multiple functions
workSheet["E12"].Formula = "=IF(SUM(E2:E11)>50000,\"Over Budget\",\"On Track\")";
workSheet["F12"].Formula = "=SUMIF(F2:F11,\">5000\")";

// Percentage calculations
workSheet["G12"].Formula = "=G11/SUM(G2:G11)*100";
workSheet["G12"].FormatString = "0.00%";

// Ensure all formulas calculate
workSheet.EvaluateAll();
// Use built-in aggregation functions for ranges
decimal sum = workSheet["A2:A11"].Sum();
decimal avg = workSheet["B2:B11"].Avg();
decimal max = workSheet["C2:C11"].Max();
decimal min = workSheet["D2:D11"].Min();

// Assign calculated values to cells
workSheet["A12"].Value = sum;
workSheet["B12"].Value = avg;
workSheet["C12"].Value = max;
workSheet["D12"].Value = min;

// Or use Excel formulas directly
workSheet["A12"].Formula = "=SUM(A2:A11)";
workSheet["B12"].Formula = "=AVERAGE(B2:B11)";
workSheet["C12"].Formula = "=MAX(C2:C11)";
workSheet["D12"].Formula = "=MIN(D2:D11)";

// Complex formulas with multiple functions
workSheet["E12"].Formula = "=IF(SUM(E2:E11)>50000,\"Over Budget\",\"On Track\")";
workSheet["F12"].Formula = "=SUMIF(F2:F11,\">5000\")";

// Percentage calculations
workSheet["G12"].Formula = "=G11/SUM(G2:G11)*100";
workSheet["G12"].FormatString = "0.00%";

// Ensure all formulas calculate
workSheet.EvaluateAll();
' Use built-in aggregation functions for ranges
Dim sum As Decimal = workSheet("A2:A11").Sum()
Dim avg As Decimal = workSheet("B2:B11").Avg()
Dim max As Decimal = workSheet("C2:C11").Max()
Dim min As Decimal = workSheet("D2:D11").Min()

' Assign calculated values to cells
workSheet("A12").Value = sum
workSheet("B12").Value = avg
workSheet("C12").Value = max
workSheet("D12").Value = min

' Or use Excel formulas directly
workSheet("A12").Formula = "=SUM(A2:A11)"
workSheet("B12").Formula = "=AVERAGE(B2:B11)"
workSheet("C12").Formula = "=MAX(C2:C11)"
workSheet("D12").Formula = "=MIN(D2:D11)"

' Complex formulas with multiple functions
workSheet("E12").Formula = "=IF(SUM(E2:E11)>50000,""Over Budget"",""On Track"")"
workSheet("F12").Formula = "=SUMIF(F2:F11,"">5000"")"

' Percentage calculations
workSheet("G12").Formula = "=G11/SUM(G2:G11)*100"
workSheet("G12").FormatString = "0.00%"

' Ensure all formulas calculate
workSheet.EvaluateAll()
$vbLabelText   $csharpLabel

Die Klasse Range stellt Methoden wie Sum, Average, Max, und Min für schnelle Berechnungen bereit. Für komplexere Szenarien verwenden Sie die Eigenschaft Formula, um Excel-Formeln direkt zu setzen.

TippsBevorzugen Sie IronXLs eingebaute Methoden .Sum(), .Avg(), .Max() und .Min() über rohe Formelzeichenketten, wenn Sie mit Bereichen arbeiten. Sie sind typsicher und vermeiden Formelsyntaxfehler zur Kompilierzeit.)}


Wie lege ich die Eigenschaften für Arbeitsblatt und Druck fest?

Verwenden Sie IronXL, um einzelne Arbeitsblätter zu schützen, Zeilen und Spalten einzufrieren und Druckformatoptionen einzustellen.

Wie kann ich die Eigenschaften eines Arbeitsblatts konfigurieren?

Arbeitsblätter schützen und Anzeigeoptionen kontrollieren:

:path=/static-assets/excel/content-code-examples/tutorials/create-excel-file-net-11.cs
workSheet.SetPrintArea("A1:L12");
workSheet.PrintSetup.PrintOrientation = IronXL.Printing.PrintOrientation.Landscape;
workSheet.PrintSetup.PaperSize = IronXL.Printing.PaperSize.A4;
workSheet.SetPrintArea("A1:L12")
workSheet.PrintSetup.PrintOrientation = IronXL.Printing.PrintOrientation.Landscape
workSheet.PrintSetup.PaperSize = IronXL.Printing.PaperSize.A4
$vbLabelText   $csharpLabel

Arbeitsblattschutz verhindert versehentliche Änderungen, während Einfriefen von Fenstern wichtige Zeilen oder Spalten beim Scrollen sichtbar hält.

Gefrorene Fenster Abbildung 7 - Gefrorene Kopfzeile bleibt beim Scrollen sichtbar

Excel-Schutzdialog erfordert Passwort, um geschütztes Arbeitsblatt zu ändern Abbildung 8 - Passwortschutz verhindert unbefugte Bearbeitungen

Wie konfiguriere ich die Seiten- und Druckeinstellungen?

Drucklayout-Optionen (Ausrichtung, Papiergröße, Ränder, Skalierung, Kopf- und Fußzeilen) werden alle über WorkSheet.PrintSetup bereitgestellt:

:path=/static-assets/excel/content-code-examples/tutorials/create-excel-file-net-12.cs
workBook.SaveAs("Budget.xlsx");
workBook.SaveAs("Budget.xlsx")
$vbLabelText   $csharpLabel

Die Klasse IPrintSetup bietet umfassende Druckkonfigurationsoptionen, die den Excel-Druckeinstellungen entsprechen.

Excel-Druckvorschau zeigt Querformat und A4-Papiergröße Abbildung 9 - Druckvorschau mit Querformat und benutzerdefinierten Rändern


Wie speichere ich meine Excel-Arbeitsmappe?

Speichern Sie Ihre Arbeitsmappe in verschiedenen Formaten:

// Save as XLSX (recommended for modern Excel)
workBook.SaveAs("Budget.xlsx");

// Save as XLS for legacy compatibility
workBook.SaveAs("Budget.xls");

// Save as CSV for data exchange
workBook.SaveAsCsv("Budget.csv");

// Save as JSON for web applications
workBook.SaveAsJson("Budget.json");

// Save to stream for web downloads or cloud storage
using (var stream = new MemoryStream())
{
    workBook.SaveAs(stream);
    byte[] excelData = stream.ToArray();
    // Send to client or save to cloud
}

// Save with specific encoding for international characters
workBook.SaveAsCsv("Budget_UTF8.csv", System.Text.Encoding.UTF8);
// Save as XLSX (recommended for modern Excel)
workBook.SaveAs("Budget.xlsx");

// Save as XLS for legacy compatibility
workBook.SaveAs("Budget.xls");

// Save as CSV for data exchange
workBook.SaveAsCsv("Budget.csv");

// Save as JSON for web applications
workBook.SaveAsJson("Budget.json");

// Save to stream for web downloads or cloud storage
using (var stream = new MemoryStream())
{
    workBook.SaveAs(stream);
    byte[] excelData = stream.ToArray();
    // Send to client or save to cloud
}

// Save with specific encoding for international characters
workBook.SaveAsCsv("Budget_UTF8.csv", System.Text.Encoding.UTF8);
' Save as XLSX (recommended for modern Excel)
workBook.SaveAs("Budget.xlsx")

' Save as XLS for legacy compatibility
workBook.SaveAs("Budget.xls")

' Save as CSV for data exchange
workBook.SaveAsCsv("Budget.csv")

' Save as JSON for web applications
workBook.SaveAsJson("Budget.json")

' Save to stream for web downloads or cloud storage
Using stream = New MemoryStream()
	workBook.SaveAs(stream)
	Dim excelData() As Byte = stream.ToArray()
	' Send to client or save to cloud
End Using

' Save with specific encoding for international characters
workBook.SaveAsCsv("Budget_UTF8.csv", System.Text.Encoding.UTF8)
$vbLabelText   $csharpLabel

IronXL unterstützt mehrere Exportformate, darunter XLSX, XLS, CSV, TSV und JSON. Die Methode Save wählt das Format basierend auf der Dateierweiterung.

  • XLSX / XLS : Vollständiges Excel-Format mit Formatierung, Formeln und mehreren Tabellenblättern
  • CSV: Klartext für Datenaustausch, ein Blatt pro Datei
  • JSON : Strukturierte Ausgabe für Web-APIs und Datenpipelines
  • Stream: Ausgabe im Arbeitsspeicher, nützlich für Web-Downloads oder Cloud-Speicherung

Wie lange dauert die Generierung tatsächlich?

Ich habe einen Generierungs-Benchmark auf einem Windows 11-Rechner (.NET 9.0.7) durchgeführt, um konkrete Zahlen für eine Arbeitsmappe zu erhalten, die etwa die Größe der meisten Produktexporte hat. Das Harness erstellt ein 10.000-Zeilen-, drei-Spalten-XLSX im Speicher und schreibt es in einer einzelnen SaveAs-Aufruf, sowohl kalt als auch warm, auf die Festplatte. Das vollständige Projekt befindet sich weiter unten im CreateExcelBenchmark Beispielprojekt. Drei separate Prozessstarts ergaben sich ungefähr hier:

Betrieb Erster Kaltlauf (frischer Prozess) Warmer Durchschnitt über 10 Iterationen
Erstellen Sie 10.000-Zeilen-, 3-Spalten-XLSX und SaveAs einmal ~570–910 ms ~350 ms (Bereich 240–450 ms)

Die kalte Zahl wird von IronXL's Assembly-Load- und JIT-Aufwärmen dominiert. Sobald der Prozess aufgewärmt ist, fällt die Generierung in den mittleren 300-ms-Bereich mit ein wenig Variabilität von Hintergrundaktivitäten. Für erheblich größere Arbeitsbücher (Hunderttausende von Zeilen, mehrere Blätter, umfangreiches Styling) schreibe ich das gesamte Arbeitsbuch im Speicher und rufe SaveAs exakt einmal am Ende auf. Der häufigste Grund für 'Warum ist mein Export so langsam?' Tickets, die wir sehen, ist das wiederholte Aufrufen von SaveAs innerhalb einer Schleife, während das Arbeitsbuch wächst: Jeder Speicherstand serialisiert den gesamten aktuellen Zustand, daher steigen die Kosten mit jeder Iteration.


Häufige Stolpersteine

Einige Dinge beißen Menschen oft genug, um einen eigenen Abschnitt zu verdienen.

Vergessen von FormatString bei Daten und Währungen

Die häufigste Formatierungsfalle, die ich sehe: Setzen .Value auf ein DateTime, aber Vergessen von FormatString. Das Datum wird korrekt gespeichert, aber Excel zeigt es als rohe Seriennummer an (45292 bedeutet 2024-01-01), bis Sie einen Formatstring wie "yyyy-MM-dd" anwenden. Währung hat das identische Problem: Die Zahl ist richtig, aber ohne "$#,##0.00" wird sie als nackte Dezimalzahl dargestellt. Ich schreibe den Wert und das Format jetzt in aufeinanderfolgenden Zeilen, so dass die beiden nicht auseinanderlaufen können:

var dateCell = sheet["A2"];
dateCell.Value = DateTime.Today;
dateCell.FormatString = "yyyy-MM-dd";

var moneyCell = sheet["B2"];
moneyCell.Value = 1499.95m;
moneyCell.FormatString = "$#,##0.00";
var dateCell = sheet["A2"];
dateCell.Value = DateTime.Today;
dateCell.FormatString = "yyyy-MM-dd";

var moneyCell = sheet["B2"];
moneyCell.Value = 1499.95m;
moneyCell.FormatString = "$#,##0.00";
Dim dateCell = sheet("A2")
dateCell.Value = DateTime.Today
dateCell.FormatString = "yyyy-MM-dd"

Dim moneyCell = sheet("B2")
moneyCell.Value = 1499.95D
moneyCell.FormatString = "$#,##0.00"
$vbLabelText   $csharpLabel

XLS trunkiert stillschweigend bei 65.536 Zeilen

Dies wird im Formatwahl-Abschnitt oben im Artikel erwähnt, aber es verdient seinen Platz hier, weil der Fehler stumm ist: ExcelFileFormat.XLS begrenzt auf 65.536 Zeilen pro Blatt, und Zeilen über dieses Limit hinaus werden ohne Ausnahme oder Warnung fallen gelassen. Der Export "erfolgt" und Ihre Daten sind weg. Wählen Sie für alles, was datenintensiv ist, XLSX, es sei denn, ein nachgeschaltetes System kann es buchstäblich nicht lesen.

"Excel sagt, die Datei sei beschädigt"

Wenn eine generierte Datei sich weigert zu öffnen oder Excel behauptet, sie sei beschädigt, liegt die Ursache fast immer an einem von zwei Dingen. Entweder wurde der Dateistream nicht korrekt geschlossen, so dass die Bytes auf der Festplatte abgeschnitten sind; oder Sie haben an einen Pfad geschrieben, der noch von einem vorherigen Lauf gesperrt war, und nur ein Teil der Daten ist angekommen. Stellen Sie sicher, dass SaveAs (oder der Stream, der ihn umgibt) vollständig abgeschlossen ist, bevor irgendetwas anderes die Datei berührt, und bevorzugen Sie einen using Block um jeden MemoryStream oder FileStream, den Sie in ein Arbeitsbuch einfügen.

Beispielprojekt für die Benchmark-Zahlen

Wenn Sie die Timing-Zahlen aus früher reproduzieren möchten, ist das Testprogramm eine kleine .NET 9 Konsolenanwendung:

:path=/static-assets/excel/content-code-examples/tutorials/create-excel-file-net-15.cs
// CreateExcelBenchmark/Program.cs (excerpt)
IronXL.License.LicenseKey = Environment.GetEnvironmentVariable("IRONXL_LICENSE_KEY");

var sw = Stopwatch.StartNew();
var workbook = WorkBook.Create(ExcelFileFormat.XLSX);
var sheet = workbook.CreateWorkSheet("Data");
sheet["A1"].Value = "Id";
sheet["B1"].Value = "Name";
sheet["C1"].Value = "Amount";
for (int i = 0; i < 10_000; i++)
{
    int row = i + 2;
    sheet[$"A{row}"].Value = i + 1;
    sheet[$"B{row}"].Value = $"Item {i + 1}";
    sheet[$"C{row}"].Value = (i + 1) * 1.25m;
}
workbook.SaveAs("Generated.xlsx");
sw.Stop();
Console.WriteLine($"cold: {sw.Elapsed.TotalMilliseconds:F1} ms");
Imports System
Imports System.Diagnostics
Imports IronXL

Module Program
    Sub Main()
        License.LicenseKey = Environment.GetEnvironmentVariable("IRONXL_LICENSE_KEY")

        Dim sw As Stopwatch = Stopwatch.StartNew()
        Dim workbook As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX)
        Dim sheet As WorkSheet = workbook.CreateWorkSheet("Data")
        sheet("A1").Value = "Id"
        sheet("B1").Value = "Name"
        sheet("C1").Value = "Amount"
        For i As Integer = 0 To 9999
            Dim row As Integer = i + 2
            sheet($"A{row}").Value = i + 1
            sheet($"B{row}").Value = $"Item {i + 1}"
            sheet($"C{row}").Value = (i + 1) * 1.25D
        Next
        workbook.SaveAs("Generated.xlsx")
        sw.Stop()
        Console.WriteLine($"cold: {sw.Elapsed.TotalMilliseconds:F1} ms")
    End Sub
End Module
$vbLabelText   $csharpLabel

Führen Sie es unter dotnet run -c Release aus und tauschen Sie Ihre eigenen Zeilenanzahlen, Spaltenanzahlen oder Styling aus, um zu sehen, wie sich die Zahlen mit der Komplexität des Arbeitsbuchs ändern.


Objektreferenz und Ressourcen

Die IronXL API Referenz umfasst jede Klasse und Methode, die in diesem Tutorial erwähnt wird, sowie die, die es nicht tut.

Zusätzliche Tutorials für verwandte Excel-Operationen:

Zusammenfassung

IronXL.Excel generiert Excel-Arbeitsbücher in XLSX-, XLS-, CSV- und JSON-Formaten, ohne von Microsoft Office oder Interop abhängig zu sein. Das Rezept, dem ich bei jedem Projekt folge, ist dasselbe: das Arbeitsbuch erstellen, ein Arbeitsblatt hinzufügen, Werte und Formeln schreiben, Formatstrings dort festlegen, wo die Darstellung wichtig ist, und einmal am Ende speichern.

Bereit, IronXL in der Produktion zu verwenden? Starten Sie Ihre kostenlose Testversion oder sehen Sie sich die Lizenzierungsoptionen an.

Häufig gestellte Fragen

Wie kann ich Excel-Dateien in C# ohne Interop erstellen?

Sie können Excel-Dateien ohne Interop mit IronXL erstellen, das eine einfache API bereitstellt: WorkBook workBook = WorkBook.Create(ExcelFileFormat.XLSX). Dieser Ansatz funktioniert auf jeder .NET-Plattform ohne die Installation von Microsoft Office.

Welche Plattformen werden bei der Erstellung von Excel-Dateien mit C# unterstützt?

IronXL unterstützt die Erstellung von Excel-Dateien auf .NET 10, .NET 9, .NET 8, .NET Core, .NET Framework 4.6.2+, ausgeführt in Windows-, macOS-, Linux-, Docker-, Azure- und AWS-Umgebungen.

Wie installiere ich eine C#-Bibliothek für die Excel-Erstellung?

Installieren Sie IronXL über den NuGet-Paket-Manager in Visual Studio, verwenden Sie den Befehl PM> Install-Package IronXL.Excel oder laden Sie es direkt von nuget.org herunter.

Wie erstelle ich programmgesteuert ein neues Excel-Arbeitsbuch?

Erstellen Sie ein Arbeitsbuch mit IronXL mit WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX) und fügen Sie dann Arbeitsblätter hinzu: workbook.CreateWorkSheet("SheetName").

Wie kann ich Zellwerte in einem Excel-Arbeitsblatt mit C# festlegen?

Legen Sie Zellwerte in IronXL mit intuitiver Syntax fest: worksheet["A1"].Value = "Hello World" oder setzen Sie Bereiche: worksheet["A1:A10"].Value = 100.

Kann ich Zellen in Excel programmgesteuert formatieren?

Ja, IronXL unterstützt umfassende Formatierung einschließlich Hintergrundfarben (cell.Style.SetBackgroundColor("#FF0000")), Rahmen, Schriftarten und Zahlenformate.

Wie verwende ich Excel-Formeln in C#?

Wenden Sie Formeln mit der Formula-Eigenschaft von IronXL an: worksheet["A1"].Formula = "=SUM(B1:B10)", oder verwenden Sie eingebaute Methoden wie range.Sum(), range.Avg().

Wie kann ich ein Excel-Arbeitsblatt mit einem Passwort schützen?

Schützen Sie Arbeitsblätter in IronXL mit worksheet.ProtectSheet("YourPassword"), um unbefugte Änderungen zu verhindern.

Wie konfiguriere ich Druckeinstellungen für Excel-Dateien?

Lege Druckeinstellungen mit IronXLs PrintSetup fest: worksheet.PrintSetup.PrintOrientation = PrintOrientation.Landscape und worksheet.SetPrintArea("A1:Z100").

Wie speichere ich ein Excel-Arbeitsbuch in verschiedenen Formaten?

Speichern Sie Arbeitsmappen mit der SaveAs-Methode von IronXL: workbook.SaveAs("file.xlsx") für XLSX, oder verwenden Sie SaveAsCsv(), SaveAsJson() für andere Formate.

Wie befülle ich ein Excel-Blatt mit Daten aus einer Datenbank?

Verwenden Sie IronXL, um Arbeitsblätter zu befüllen, indem Sie Daten aus einer Datenbank abrufen und diese in Zellen mit Methoden wie worksheet["A1"].Value = dataFromDatabase setzen.

Wie kann ich eingefrorene Fenster in einem Excel-Arbeitsblatt mit C# implementieren?

Frieren Sie Fenster in Arbeitsblättern ein mit IronXL: worksheet.FreezePanes(1, 1), um die oberste Reihe und die linke Spalte für eine einfachere Navigation zu sperren.

Jacob Mellor, Chief Technology Officer @ Team Iron
Chief Technology Officer

Jacob Mellor ist Chief Technology Officer bei Iron Software und ein visionärer Ingenieur, der Pionierarbeit in der C# PDF-Technologie leistet. Als der ursprüngliche Entwickler hinter der Kern-Codebasis von Iron Software hat er die Produktarchitektur des Unternehmens seit seiner Gründung geprägt und es zusammen mit CEO ...

Weiterlesen
Bereit anzufangen?
Nuget Downloads 2,150,290 | Version: 2026.7 gerade veröffentlicht
Still Scrolling Icon

Scrollst du immer noch?

Sie brauchen schnell einen Beweis? PM > Install-Package IronXL.Excel
Führen Sie ein Beispiel aus und sehen Sie zu, wie Ihre Daten zu einer Tabellenkalkulation werden.