How to Create an Excel File in C# (.NET Tutorial)
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.
-
Installieren Sie IronXL mit NuGet Package Manager
-
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"); -
Bereitstellen zum Testen in Ihrer Live-Umgebung
Beginnen Sie noch heute, IronXL in Ihrem Projekt zu verwenden, mit einer kostenlosen Testversion
Minimaler Arbeitsablauf (5 Schritte)
- Laden Sie die IronXL C#-Bibliothek herunter und installieren Sie sie.
- Richten Sie Ihr .NET-Projekt ein.
- Erstellen Sie ein
Workbookund einWorksheet - Zellwerte, Formatierung und Formeln festlegen
- Speichern Sie Ihre Excel-Datei
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.
Abbildung 3 - Zugriff auf den NuGet-Paketmanager über das Projekmenü
Abbildung 4 - Rechtsklick-Kontextmenü im Lösungs-Explorer
Suchen Sie im Paketlisten nach IronXL.Excel und klicken Sie auf Installieren.
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.
Abbildung 6 - IronXL-Bibliothek von der offiziellen Webseite herunterladen
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:
- Öffnen Sie Visual Studio
- Klicken Sie auf Datei > Neues Projekt
- Wählen Sie 'Web' unter Visual C# in der Projekttypenliste
-
Wählen Sie 'ASP.NET-Webanwendung'

Abbildung 1 – Create new ASP.NET project
- Klicken Sie 'OK'
-
Wählen Sie das Webforms-Template

Abbildung 2 – Select Web Forms template
- 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")
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"
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 hinzuWorkSheet: 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
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
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")
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
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
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()
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.
.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
Arbeitsblattschutz verhindert versehentliche Änderungen, während Einfriefen von Fenstern wichtige Zeilen oder Spalten beim Scrollen sichtbar hält.
Abbildung 7 - Gefrorene Kopfzeile bleibt beim Scrollen sichtbar
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")
Die Klasse IPrintSetup bietet umfassende Druckkonfigurationsoptionen, die den Excel-Druckeinstellungen entsprechen.
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)
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"
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
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.

