Erstellen von Excel-Dateien in C#
Das Erstellen von und Arbeiten mit Excel-Dateien ist eine wichtige Fähigkeit für jeden C#-Entwickler, der Berichtstools, Datenexporte oder Benutzereingabeoberflächen erstellt. In diesem Artikel tauchen wir tief in eine detaillierte Anleitung ein, die Tim Corey in seinem Video "Creating Excel files in C#" zur Verfügung stellt, in dem er demonstriert, wie man eine Excel-Datei mit C# erstellt, sie formatiert und sogar Daten aus ihr zurückliest - alles unter Verwendung der EPPlus-Bibliothek.
Ob Sie ein neues Excel-Arbeitsbuch aus einer Liste erstellen, Excel-Arbeitsblattzellen formatieren oder strukturierte Daten zurück in Ihre Anwendung einlesen möchten, Tims Beispiel dient als praktisches Tutorial, um die Grundlagen der Excel-Dateierstellung in C# abzudecken.
Gehen wir Schritt für Schritt vor und beziehen uns dabei auf Tims Video.
Einführung: Warum Excel in C# verwenden?
Tim beginnt mit der Erklärung, dass Microsoft Excel eines der wichtigsten Tools im Geschäftsleben ist. Excel-Dateien sind benutzerfreundlich, sehr vielseitig und perfekt für die Darstellung von Daten. Er hebt hervor, wie die Erstellung von Excel-Dateien in C# als Ersatz für komplexe Berichtslösungen verwendet werden kann - so wird Excel zu Ihrem Standard-Berichtstool.
Das Ziel: eine Excel-Anwendung mit C# erstellen, sie mit Daten füllen, einige Formatierungen vornehmen und dann aus dieser Excel-Datei lesen.
Einrichten des Projekts im Solution Explorer
Tim öffnet Visual Studio 2019, wählt eine Konsolenanwendung (.NET Core) und nennt die Lösung ExcelDemoApp. Die Verwendung einer Konsolenanwendung bietet eine saubere und ablenkungsfreie Umgebung, um sich ausschließlich auf Excel-bezogenen Code zu konzentrieren.
Er aktualisiert das Target Framework auf .NET 5.0, um C# 9-Funktionen wie die vereinfachte Objektinstanziierung zu nutzen.
EPPlus aus NuGet-Paketen hinzufügen
Um eine Excel-Arbeitsmappe zu erstellen, installiert Tim das EPPlus-Paket über NuGet Package Manager. EPPlus ist eine Excel-Bibliothek, die mit .xlsx-Dateien (Open XML) arbeitet und alle Excel-Funktionen wie Diagramme, Tabellen, Stile und Formeln unterstützt, ohne dass MS Office oder Excel Interop erforderlich sind.
Hinweis: EPPlus ist für die nicht-kommerzielle Nutzung kostenlos, für kommerzielle Anwendungen ist eine Lizenz erforderlich.
Er kopiert die erforderliche nicht-kommerzielle Lizenzannahmezeile in seinen Code, um Laufzeitfehler zu vermeiden, und fügt die erforderlichen Angaben mit OfficeOpenXml hinzu; richtlinie.
Definieren des Excel-Dateipfads
Mit System.IO.FileInfo setzt Tim einen fest kodierten Dateipfad:
var file = new FileInfo(@"C:\demos\youtubedemo.xlsx");
var file = new FileInfo(@"C:\demos\youtubedemo.xlsx");
Diese Datei existiert anfangs nicht - sie wird vom Programm dynamisch erstellt.
Erstellen eines Datenmodells
Um das Excel-Arbeitsblatt zu füllen, definiert Tim eine einfache PersonModel-Klasse mit den folgenden Eigenschaften:
-
int Id
-
string Vorname
- string LastName
Er verwendet eine Hilfsmethode GetSetupData(), um eine List
Daten asynchron in einer Excel-Datei speichern
In der modernen Entwicklung ist das Blockieren des UI-Threads inakzeptabel. Aus diesem Grund definiert Tim eine asynchrone Methode:
static async Task SaveExcelFile(List<PersonModel> people, FileInfo file)
static async Task SaveExcelFile(List<PersonModel> people, FileInfo file)
Bevor er in Excel schreibt, prüft er, ob die Datei existiert und löscht sie, um Namenskonflikte zu vermeiden.
if (file.Exists) file.Delete();
if (file.Exists) file.Delete();
Erstellen und Formatieren des Excel-Arbeitsblatts
Tim verwendet das EPPlus ExcelPackage-Objekt innerhalb eines using-Blocks, um die ordnungsgemäße Entsorgung sicherzustellen:
using var package = new ExcelPackage(file);
using var package = new ExcelPackage(file);
Er fügt ein neues Arbeitsblatt in die Arbeitsmappe ein:
var ws = package.Workbook.Worksheets.Add("MainReport");
var ws = package.Workbook.Worksheets.Add("MainReport");
Laden von Daten
Mit LoadFromCollection fügt er die Liste der Personen ab der Zelle "A2" ein:
ws.Cells["A2"].LoadFromCollection(people, true);
ws.Cells["A2"].LoadFromCollection(people, true);
- true stellt sicher, dass Kopfzeilen enthalten sind (wie "Id", "FirstName", "LastName").
Anschließend passt AutoFitColumns() die Spaltenbreiten automatisch an:
ws.Cells[ws.Dimension.Address].AutoFitColumns();
ws.Cells[ws.Dimension.Address].AutoFitColumns();
Schließlich speichert er die Excel-Datei:
await package.SaveAsync();
await package.SaveAsync();
Modellierung von Excel-Zellen und -Zeilen
Um die Excel-Datei besser lesbar zu machen, zeigt Tim, wie man Stile anwendet:
Titelzeile
ws.Cells["A1"].Value = "Our Cool Report";
ws.Cells["A1:C1"].Merge = true; ws.Row(1).Style.Font.Size = 24;
ws.Row(1).Style.Font.Color.SetColor(Color.Blue);
ws.Column(1).Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;
ws.Cells["A1"].Value = "Our Cool Report";
ws.Cells["A1:C1"].Merge = true; ws.Row(1).Style.Font.Size = 24;
ws.Row(1).Style.Font.Color.SetColor(Color.Blue);
ws.Column(1).Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;
Kopfzeile
ws.Row(2).Style.Font.Bold = true;
ws.Row(2).Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;
ws.Row(2).Style.Font.Bold = true;
ws.Row(2).Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;
Benutzerdefinierte Spaltenbreite
ws.Column(3).Width = 20;
ws.Column(3).Width = 20;
In diesem Abschnitt werden fortgeschrittene Formatierungen demonstriert, wie zum Beispiel:
-
Zusammengeführte Zellen
-
Schriftart-Styling
-
Hintergrundfarben
-
Zeilen-/Spalten-Alignment
- Breitenanpassungen
Sie imitieren die typischen Formatierungsfunktionen von MS Office Excel.
Lesen von Daten aus einer Excel-Datei in C
Nachdem wir nun Daten in Excel geschrieben haben, ist es an der Zeit, sie wieder in C# einzulesen.
Tim stellt die Methode vor:
static async Task<List<PersonModel>> LoadExcelFile(FileInfo file)
static async Task<List<PersonModel>> LoadExcelFile(FileInfo file)
Er richtet Zeilen- und Spaltenzähler ein:
int row = 3; // Skip title and header rows int col = 1;
int row = 3; // Skip title and header rows int col = 1;
Schleifen durch Zeilen
Mithilfe einer while-Schleife prüft er auf nicht leere Zellen und liest Werte ein:
while (!string.IsNullOrWhiteSpace(ws.Cells[row, col].Value?.ToString()))
while (!string.IsNullOrWhiteSpace(ws.Cells[row, col].Value?.ToString()))
Innerhalb der Schleife werden die Werte gelesen und geparst:
p.Id = int.Parse(ws.Cells[row, col].Value.ToString());
p.FirstName = ws.Cells[row, col + 1].Value.ToString();
p.LastName = ws.Cells[row, col + 2].Value.ToString();
p.Id = int.Parse(ws.Cells[row, col].Value.ToString());
p.FirstName = ws.Cells[row, col + 1].Value.ToString();
p.LastName = ws.Cells[row, col + 2].Value.ToString();
Die List
Überprüfung importierter Daten
Tim führt eine Schleife durch die zurückgegebene Liste und schreibt jeden Eintrag in die Konsole:
foreach (var p in peopleFromExcel)
{
Console.WriteLine($"{p.Id} {p.FirstName} {p.LastName}");
}
foreach (var p in peopleFromExcel)
{
Console.WriteLine($"{p.Id} {p.FirstName} {p.LastName}");
}
Um die Flexibilität von Excel als Benutzereingabetool zu demonstrieren, fügt Tim manuell neue Datensätze ("Bill Smith", "Mary White") direkt in der Excel-Datei hinzu. Beim erneuten Ausführen der Anwendung werden diese Einträge importiert, ohne dass der Code geändert wird - ein Beweis für das Potenzial von Excel als Schnittstelle für die Dateneingabe.
Praktische Anwendungsfälle
Tim zeigt Anwendungsfälle für die C#-Excel-Lösung auf:
-
Exportieren von Datenbanktabellen nach Excel
-
Importieren von Daten, die von Endbenutzern eingegeben wurden
-
Verwendung von Excel als Dashboard für Berichte
- Erstellen strukturierter Arbeitsmappen für die Datenverarbeitung
Und das alles, ohne auf Microsoft.Office.Interop.Excel zurückzugreifen, das die Installation von Excel voraussetzt.
Abschließende Hinweise zu EPPlus und Excel-Dateien
Tim erklärt, dass programmatisch erstellte .xlsx-Dateien nicht alle Metadaten enthalten, bis sie in Excel geöffnet und gespeichert werden. Aus diesem Grund erhöht sich die Dateigröße nach dem Öffnen der Datei in der echten Excel-Anwendung.
Er weist auch darauf hin, dass EPPlus eine ausgefeilte, robuste Bibliothek mit Unterstützung für ist:
-
Diagramme
-
Bilder
-
Sparklines
-
Formeln
-
Seite einrichten
-
Grenzen
- Zellformatierung
Abschluss
Das Erstellen von Excel-Dateien in C# muss nicht schwierig oder teuer sein. Dank der EPPlus Excel-Bibliothek können Entwickler funktionsreiche Excel-Dokumente programmatisch erstellen, ohne MS Office zu benötigen. Wie Tim Corey demonstriert, können Sie mit nur wenigen Zeilen Code:
-
Erstellen Sie eine Excel-Datei
-
Zeilen und Spalten ausfüllen
-
Styling anwenden
-
Daten zurücklesen
- Excel als benutzerorientierte Benutzeroberfläche verwenden
Dies macht es zu einer fantastischen Wahl für leichtgewichtige Reporting-Tools, Datenimport/-export oder einfach nur, um Ihren Benutzern eine Schnittstelle zu bieten, die sie bereits kennen.
Wenn Sie also das nächste Mal ein Projekt erstellen und Excel-Daten ausgeben oder verwenden müssen, implementieren Sie den Beispielcode aus Tim Coreys Video und bringen Sie die Leistungsfähigkeit von Excel in Ihre .NET Framework- oder .NET Core-Anwendungen.
