Test in einer Live-Umgebung
Test in der Produktion ohne Wasserzeichen.
Funktioniert überall, wo Sie es brauchen.
Die Arbeit mit CSV-Dateien kann eine schwierige Aufgabe sein. Es gibt heute viele Bibliotheken, die Entwicklern bei dieser Aufgabe helfen, ohne dass Microsoft Excel installiert sein muss.
In diesem Artikel werden wir besprechen und vergleichen, wie man mit Microsoft Excel-Dokumenten programmatisch in C# .NET-Technologien arbeiten kann, entweder im CSV-Format oder im Standard-XLSX-Format, unter Verwendung von zwei der beliebtesten Bibliotheken, IronXL und CsvHelper.
Schauen wir uns zunächst einmal an, was beide Bibliotheken zu bieten haben.
IronXL ist eine .NET-Bibliothek, die das Lesen und Bearbeiten von Microsoft Excel-Dokumenten mit C# erleichtert. IronXL.Excel ist eine eigenständige .NET-Softwarebibliothek zum Lesen einer breiten Palette von Tabellenkalkulationsformaten. Es erfordert weder die Installation von Microsoft Excel, noch ist es von Interop abhängig. Es arbeitet sehr reibungslos mit CSV-Dateien.
IronXL ist eine intuitive C#-API, die es Ihnen ermöglicht, Excel-Tabellendateien in .NET mit blitzschneller Leistung zu lesen, zu bearbeiten und zu erstellen. IronXL unterstützt vollständig .NET Core, .NET-Framework, Xamarin, Mobile, Linux, macOS und Azure.
IronXL ist eine führende .NET Core und .NET-Framework Excel-Tabellenbibliothek für C#.
Eine .NET-Bibliothek zum Lesen und Schreiben von CSV-Dateien. Äußerst schnell, flexibel und einfach zu bedienen. Unterstützt das Lesen und Schreiben von benutzerdefinierten Klassenobjekten. Alle Beispielcodes sind in dem Paket CsvHelper documentation install verfügbar.
CsvKonfiguration
klasse, um die Konfiguration für CSV festzulegenStreamReader
CsvReader
klasse zu lesenDefaultTypeConverter
klasseGehen Sie wie folgt vor, um eine Konsolenanwendung zu erstellen:
Projekt erstellen - Konsolenanwendung
Geben Sie auf dem Bildschirm Zusätzliche Informationen die Framework-Version an, die Sie verwenden möchten. In diesem Beispiel wird .NET-Framework 4.8 verwendet.
Projekt erstellen - .NET-Framework
Klicken Sie auf Erstellen, um den Vorgang abzuschließen.
Das Projekt ist nun erstellt und wir sind fast bereit, die Bibliotheken zu testen. Wir müssen sie jedoch noch installieren und in unser Projekt integrieren. Installieren wir zunächst IronXL.
Sie können die IronXL-Bibliothek mit den folgenden Methoden herunterladen und installieren:
Verwendung von Visual Studio mit NuGet-Paketen
Laden Sie das NuGet-Paket direkt herunter
Manuelle Installation mit der DLL
Schauen wir uns jede einzelne davon genauer an.
Visual Studio bietet den NuGet Package Manager, um NuGet-Pakete in Ihren Projekten zu installieren. Sie können über das Projektmenü darauf zugreifen, oder indem Sie mit der rechten Maustaste auf Ihr Projekt im Projektmappen-Explorer klicken.
Select-Manage-NuGet-Package
Suchen Sie nun auf der Registerkarte Durchsuchen -> IronXL.Excel -> Installieren
Suche nach IronXL
Dazu können Sie direkt die NuGet-Website besuchen und das Paket herunterladen. Die Schritte sind:
Eine andere Möglichkeit, die IronXL C# Bibliothek herunterzuladen und zu installieren, ist die Verwendung der folgenden Schritte, um das IronXL NuGet-Paket über die Entwickler-Eingabeaufforderung zu installieren.
PM > Install-Package IronXL.Excel
Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf die Datei Program.cs und dann auf Code anzeigen.
using IronXL;
using IronXL;
Imports IronXL
Alles erledigt! IronXL ist heruntergeladen, installiert und einsatzbereit. Vorher sollten wir jedoch CsvHelper installieren.
Um die CsvHelper C# Library herunterzuladen und zu installieren, führen Sie die folgenden Schritte aus, um das NuGet-Paket über die Entwickler-Eingabeaufforderung zu installieren.
PM> Install-Package CsvHelper -Version 27.2.1
Download von der NuGet-Website: https://www.nuget.org/packages/CsvHelper/
Ein durch Komma getrennter Wert (CSV) ist eine durch Komma getrennte Textdatei, in der die Werte durch ein Komma getrennt sind. Jede Zeile der Datei ist ein Datensatz. Diese Dateien für Berechnungen zu manipulieren, kann eine schwierige Aufgabe sein, und IronXL bietet eine ziemlich gute und einfache Möglichkeit, dies ohne Microsoft Excel zu tun. Konvertieren wir zunächst eine CSV-Datei in eine normale Excel-Datei.
Das Verfahren ist ziemlich einfach und leicht. In der Regel ist dies mit einer Zeile Code erledigt.
CSV-zu-Excel-Formate:
WorkBook workbook = WorkBook.LoadCSV("test.csv", fileFormat: ExcelFileFormat.XLSX, ListDelimiter: ",");
WorkSheet ws = workbook.DefaultWorkSheet;
workbook.SaveAs("CsvToExcelConversion.xlsx");
WorkBook workbook = WorkBook.LoadCSV("test.csv", fileFormat: ExcelFileFormat.XLSX, ListDelimiter: ",");
WorkSheet ws = workbook.DefaultWorkSheet;
workbook.SaveAs("CsvToExcelConversion.xlsx");
Dim workbook As WorkBook = WorkBook.LoadCSV("test.csv", fileFormat:= ExcelFileFormat.XLSX, ListDelimiter:= ",")
Dim ws As WorkSheet = workbook.DefaultWorkSheet
'
workbook.SaveAs("CsvToExcelConversion.xlsx")
Die IronXL WorkBook-Klasse stellt ein Excel-Blatt dar. Um eine Excel-Datei mit C# zu öffnen, verwenden wir WorkBook.Load und geben den Pfad der Excel-Datei an (.xlsx). Der folgende einzeilige Code wird verwendet, um die Datei zum Lesen zu öffnen:
//Load WorkBook
var workbook = WorkBook.Load(@"Spreadsheets\\sample.xlsx");
//Load WorkBook
var workbook = WorkBook.Load(@"Spreadsheets\\sample.xlsx");
'Load WorkBook
Dim workbook = WorkBook.Load("Spreadsheets\\sample.xlsx")
Jedes WorkBook kann mehrere WorkSheet-Objekte enthalten. Diese stellen Arbeitsblätter im Excel-Dokument dar. Wenn die Arbeitsmappe Arbeitsblätter enthält, rufen Sie diese wie folgt nach Namen auf:
//Open Sheet for reading
var worksheet = workbook.GetWorkSheet("sheetnamegoeshere");
//Open Sheet for reading
var worksheet = workbook.GetWorkSheet("sheetnamegoeshere");
'Open Sheet for reading
Dim worksheet = workbook.GetWorkSheet("sheetnamegoeshere")
Code zum Lesen der Zellwerte:
// Read from Ranges of cells elegantly.
foreach (var cell in worksheet ["A2:A10"])
{
Console.WriteLine("Cell {0} has value '{1}'", cell.AddressString, cell.Text);
}
// Read from Ranges of cells elegantly.
foreach (var cell in worksheet ["A2:A10"])
{
Console.WriteLine("Cell {0} has value '{1}'", cell.AddressString, cell.Text);
}
' Read from Ranges of cells elegantly.
For Each cell In worksheet ("A2:A10")
Console.WriteLine("Cell {0} has value '{1}'", cell.AddressString, cell.Text)
Next cell
Nach dem Laden und Lesen der Arbeitsmappe und des Arbeitsblatts kann das folgende Codebeispiel verwendet werden, um entweder Änderungen an Formeln vorzunehmen oder auf bestimmte Zellen anzuwenden. Der Code lautet wie folgt:
// Set Formulas
worksheet ["A1"].Formula = "Sum(B8:C12)";
worksheet ["B8"].Formula = "=C9/C11";
worksheet ["G30"].Formula = "Max(C3:C7)";
// Force recalculate all formula values in all sheets.
workbook.EvaluateAll();
// Set Formulas
worksheet ["A1"].Formula = "Sum(B8:C12)";
worksheet ["B8"].Formula = "=C9/C11";
worksheet ["G30"].Formula = "Max(C3:C7)";
// Force recalculate all formula values in all sheets.
workbook.EvaluateAll();
' Set Formulas
worksheet ("A1").Formula = "Sum(B8:C12)"
worksheet ("B8").Formula = "=C9/C11"
worksheet ("G30").Formula = "Max(C3:C7)"
'
' Force recalculate all formula values in all sheets.
workbook.EvaluateAll()
Das Schreiben von CSV-Dateien ist mit IronXL ein einfacher Prozess. Der folgende Code speichert einfach die Excel-Datei im CSV-Format mit der Methode SaveAsCsv.
WorkBook wb = WorkBook.Load("Normal_Excel_File.xlsx");
//Import .xls, .csv, or .tsv file
wb.SaveAsCsv("SaveAsCSV.csv", ",");
//Saved as : SaveAsCSV.Sheet1.csv
WorkBook wb = WorkBook.Load("Normal_Excel_File.xlsx");
//Import .xls, .csv, or .tsv file
wb.SaveAsCsv("SaveAsCSV.csv", ",");
//Saved as : SaveAsCSV.Sheet1.csv
Dim wb As WorkBook = WorkBook.Load("Normal_Excel_File.xlsx")
'Import .xls, .csv, or .tsv file
wb.SaveAsCsv("SaveAsCSV.csv", ",")
'Saved as : SaveAsCSV.Sheet1.csv
Das Lesen von CSV-Dateien ist eine der Aufgaben, die viel einfacher erscheinen, als sie tatsächlich sind. Die CsvHelper-Bibliothek macht es einfach, typsicheren, schnellen und flexiblen Code zu schreiben.
Dies ist die CSV-Beispieldatei, die drei Textspalten und eine Zahlenspalte enthält.
FirstName,LastName,Age,IsActive
Ali,Talal,30,Yes
Affan,Ahmad,31,No
Saad,Bhatti,31,Yes
FirstName,LastName,Age,IsActive
Ali,Talal,30,Yes
Affan,Ahmad,31,No
Saad,Bhatti,31,Yes
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'FirstName,LastName,Age,IsActive Ali,Talal,30,Yes Affan,Ahmad,31,No Saad,Bhatti,31,Yes
Wir werden jede Zeile in ein Objekt vom Typ Person abbilden.
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int? Age { get; set; }
public string IsActive { get; set; }
}
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int? Age { get; set; }
public string IsActive { get; set; }
}
Public Class Person
Public Property FirstName() As String
Public Property LastName() As String
Public Property Age() As Integer?
Public Property IsActive() As String
End Class
Der Code zum Lesen unserer CSV-Datei ist unten zu sehen.
var fileName = @"<path to our CSV file>";
var configuration = new CsvConfiguration(CultureInfo.InvariantCulture)
{
Encoding = Encoding.UTF8,
Delimiter = ","
};
using (var fs = File.Open(fileName, FileMode.Open, FileAccess.Read, FileShare.Read))
{
using (var textReader = new StreamReader(fs, Encoding.UTF8))
using (var csv = new CsvReader(textReader, configuration))
{
var data = csv.GetRecords<Person>();
foreach (var person in data)
{
// Do something with values in each row
}
}
}
var fileName = @"<path to our CSV file>";
var configuration = new CsvConfiguration(CultureInfo.InvariantCulture)
{
Encoding = Encoding.UTF8,
Delimiter = ","
};
using (var fs = File.Open(fileName, FileMode.Open, FileAccess.Read, FileShare.Read))
{
using (var textReader = new StreamReader(fs, Encoding.UTF8))
using (var csv = new CsvReader(textReader, configuration))
{
var data = csv.GetRecords<Person>();
foreach (var person in data)
{
// Do something with values in each row
}
}
}
Dim fileName = "<path to our CSV file>"
Dim configuration = New CsvConfiguration(CultureInfo.InvariantCulture) With {
.Encoding = Encoding.UTF8,
.Delimiter = ","
}
Using fs = File.Open(fileName, FileMode.Open, FileAccess.Read, FileShare.Read)
Using textReader = New StreamReader(fs, Encoding.UTF8)
Using csv = New CsvReader(textReader, configuration)
Dim data = csv.GetRecords(Of Person)()
For Each person In data
' Do something with values in each row
Next person
End Using
End Using
End Using
Der Typ der Daten ist IEnumerable
CSV-Dateien enthalten meist Textdaten. Die Spalte Alter ist beispielsweise ein ganzzahliger Wert und die CSV-Datei enthält nur Text. CsvHelper kann Daten von String in .NET-Standardtypen konvertieren (Boolesch, Int32, Int64, Enum). In unserem Fall haben wir einen IsActive bool-Datentyp, der nur True/False haben kann und Nicht-Standardwerte enthält. Er kann durch Erstellen eines benutzerdefinierten Konverters konvertiert werden. Die Gestaltung des Codes sieht folgendermaßen aus:
public class CustomBooleanConverter : DefaultTypeConverter
{
public override object ConvertFromString(string text, IReaderRow row, MemberMapData memberMapData)
{
return text.Equals("Yes", StringComparison.OrdinalIgnoreCase);
}
}
public class CustomBooleanConverter : DefaultTypeConverter
{
public override object ConvertFromString(string text, IReaderRow row, MemberMapData memberMapData)
{
return text.Equals("Yes", StringComparison.OrdinalIgnoreCase);
}
}
Public Class CustomBooleanConverter
Inherits DefaultTypeConverter
Public Overrides Function ConvertFromString(ByVal text As String, ByVal row As IReaderRow, ByVal memberMapData As MemberMapData) As Object
Return text.Equals("Yes", StringComparison.OrdinalIgnoreCase)
End Function
End Class
Obwohl bool ein Standard-.NET-Typ ist, kann der Standardkonverter nur True/False-Werte verarbeiten, während unsere CSV-Datei Yes/No hat. Hier müssen wir den DefaultTypeConverter unterklassifizieren und dann die Methode ConvertFromString überschreiben.
IronXL ist ein offenes kommerzielles C# Excel-Bibliothek. Es ist kostenlos für die Entwicklung und kann jederzeit für den kommerziellen Einsatz lizenziert werden.Lizenzen sind verfügbar für Einzelprojekte, einzelne Entwickler, Agenturen und globale Unternehmen sowie für SaaS- und OEM-Vertrieb. Alle Lizenzen beinhalten eine 30-tägige Geld-zurück-Garantie, ein Jahr Produktsupport und Updates, Gültigkeit für Entwicklung/Taging/Produktion sowie eine permanente Lizenz (einmaliger Kauf). Das Lite-Paket beginnt mit $749.
CsvHelper - Lesen und Schreiben von CSV-Dateien, ist für die kommerzielle Nutzung völlig kostenlos.
IronXL ist eine vollständige Bibliothek, die alles bietet, was Sie brauchen, um eine Excel-Datei zu bearbeiten. Es ist einfach zu bedienen und bietet Ihnen die Möglichkeit, verschiedene Formate in XLSX sowie von XLSX in andere Formate, wie z. B. CSV, zu konvertieren. Diese Konvertierung bietet dem Benutzer die Flexibilität, mit verschiedenen Dateiformaten problemlos zu arbeiten.
CsvHelper hingegen wurde speziell für die Arbeit mit CSV-Dateiformaten entwickelt, d. h. es kann nur mit CSV-Dateien arbeiten. Alle Codebeispiele sind in den CsvHelper-Dokumentationsdateien zu finden. Die Dokumentation gibt Ihnen Hinweise zur Verwendung von CsvHelper in Ihrem Projekt.
IronXL hat einen klaren Vorteil gegenüber CsvHelper, da es Benutzer unterstützt, die mit mehreren Formaten arbeiten. Außerdem können Sie Formeln und Stile nach Ihren Wünschen anwenden, während CsvHelper nur das Lesen und Schreiben von CSV-Dateien mit begrenzten Optionen ermöglicht. Außerdem können Sie keine neuen Datensätze an eine bestehende CSV-Datei anhängen, da dies die vorherigen Einträge einfach überschreibt.
9 .NET API-Produkte für Ihre Bürodokumente