Zum Fußzeileninhalt springen
Iron Academy Logo
Lernen Sie C#
Lernen Sie C#

Andere Kategorien

Erstellen von Excel-Dateien in C#

Tim Corey
55m 42s

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 zurückzugeben, die mit Beispieldaten wie Tim Corey, Sue Storm und Jane Smith gefüllt ist.

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 wird ausgefüllt und zurückgegeben.

Ü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.

Hero Worlddot related to Erstellen von Excel-Dateien in C#
Hero Affiliate related to Erstellen von Excel-Dateien in C#

Verdienen Sie mehr, indem Sie teilen, was Sie lieben

Erstellen Sie Inhalte für Entwickler, die mit .NET, C#, Java, Python oder Node.js arbeiten? Verwandeln Sie Ihr Fachwissen in ein zusätzliches Einkommen!

Iron Support Team

Wir sind 24 Stunden am Tag, 5 Tage die Woche online.
Chat
E-Mail
Rufen Sie mich an