using IronXL;
using System;
using System.Linq;
// Supported for XLSX, XLS, XLSM, XLTX, CSV and TSV
WorkBook workBook = WorkBook.Load("sample.xlsx");
// Select worksheet at index 0
WorkSheet workSheet = workBook.WorkSheets[0];
// Get any existing worksheet
WorkSheet firstSheet = workBook.DefaultWorkSheet;
// Select a cell and return the converted value
int cellValue = workSheet["A2"].IntValue;
// Read from ranges of cells elegantly.
foreach (var cell in workSheet["A2:A10"])
{
Console.WriteLine("Cell {0} has value '{1}'", cell.AddressString, cell.Text);
}
// Calculate aggregate values such as Min, Max and Sum
decimal sum = workSheet["A2:A10"].Sum();
// Linq compatible
decimal max = workSheet["A2:A10"].Max(c => c.DecimalValue);
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.
Die IronXL-Bibliothek
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#.
IronXL Funktionsumfang
Laden, Lesen und Bearbeiten von Daten - aus XLS/XLSX/CSV/TSV
Speichern und Exportieren - in XLS/XLSX/CSV/TSV/JSON
Ranges - einfaches WorkSheet zu verwenden["A1:B10"] syntax. Kombinieren und erstellen Sie Bereiche intuitiv.
Sortieren - Sortierbereiche, Spalten und Zeilen.
Styling - visuelle Stile für Zellen, Schriftart, Größe, Hintergrundmuster, Rahmen, Ausrichtung und Zahlenformate.
CsvHelper
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.
Ausnutzen CsvKonfiguration klasse, um die Konfiguration für CSV festzulegen
Öffnen Sie die Datei mit C# built-in StreamReader
Geben Sie die in Schritt 2 und 3 vorgenommenen Instanzen in CsvReader klasse zu lesen
Konvertieren von Daten in CSV durch Erben von CsvHelper DefaultTypeConverter klasse
CsvHelper Eigenschaften
Schnell: Kompilieren von Klassen im laufenden Betrieb für extrem schnelle Leistung
Flexibel: konservativ beim Schreiben, liberal beim Lesen
Einfach zu bedienen: Lesen und Schreiben sind so einfach wie GetRecords() und WriteRecords(datensätze)
Hochgradig konfigurierbar
Linux-Modus
Geringe Speichernutzung
1. Erstellen einer Konsolenanwendung
Gehen Sie wie folgt vor, um eine Konsolenanwendung zu erstellen:
Starten Sie die Visual Studio 2022 IDE.
Klicken Sie auf "Neues Projekt erstellen".
Wählen Sie auf der Seite "Neues Projekt erstellen" in der Dropdown-Liste der Sprachen C#, in der Liste PlattformenWindows und in der Liste ProjekttypenKonsole.
Wählen Sie Konsolenanwendung(.NET-Framework) aus den angezeigten Projektvorlagen.
Projekt erstellen - Konsolenanwendung
Klicken Sie auf Weiter.
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.
2. IronXL C# Bibliothek Installation
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.
2.1. Verwendung von Visual Studio mit NuGet-Paketen
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
Und wir sind fertig.
2.2. Direktes Herunterladen des NuGet-Pakets
Dazu können Sie direkt die NuGet-Website besuchen und das Paket herunterladen. Die Schritte sind:
Laden Sie Ihr Visual Studio-Projekt neu und verwenden Sie es
2.3. Manuelle Installation mit der DLL
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.
Öffnen Sie die Developer-Eingabeaufforderung, die sich normalerweise im Ordner Visual Studio befindet.
Geben Sie den folgenden Befehl ein: PM > Install-Package IronXL.Excel
Eingabe drücken
Dadurch wird das Paket heruntergeladen und installiert
Laden Sie Ihr Visual Studio-Projekt neu und verwenden Sie es
2.4. Notwendige Verwendungsrichtlinien hinzufügen
Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf die Datei Program.cs und dann auf Code anzeigen.
Fügen Sie die folgenden using-Direktiven am Anfang der Codedatei hinzu:
using IronXL;
using IronXL;
Imports IronXL
$vbLabelText $csharpLabel
Alles erledigt! IronXL ist heruntergeladen, installiert und einsatzbereit. Vorher sollten wir jedoch CsvHelper installieren.
3. CsvHelper Installation
3.1. Verwendung der NuGet-Paketmanager-Konsole
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.
Öffnen Sie die Developer-Eingabeaufforderung, die sich normalerweise im Ordner Visual Studio befindet.
Geben Sie den folgenden Befehl ein: PM> Install-Package CsvHelper -Version 27.2.1
Eingabe drücken
Dadurch wird das Paket heruntergeladen und installiert
Laden Sie Ihr Visual Studio-Projekt neu und verwenden Sie es
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.
4.1. Konvertierung einer CSV-Datei in das Excel-Format
Das Verfahren ist ziemlich einfach und leicht. In der Regel ist dies mit einer Zeile Code erledigt.
Dim workbook As WorkBook = WorkBook.LoadCSV("test.csv", fileFormat:= ExcelFileFormat.XLSX, ListDelimiter:= ",")
Dim ws As WorkSheet = workbook.DefaultWorkSheet
'
workbook.SaveAs("CsvToExcelConversion.xlsx")
$vbLabelText $csharpLabel
4.2. Lesen und Manipulieren konvertierter CSV-Dateien mit IronXL
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")
$vbLabelText $csharpLabel
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")
$vbLabelText $csharpLabel
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
$vbLabelText $csharpLabel
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()
$vbLabelText $csharpLabel
4.3. Speichern des Excel-Dokuments zurück in die CSV-Datei
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
$vbLabelText $csharpLabel
5. Arbeiten mit CSV-Dateien mit CsvHelper
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.
5.1. CSV-Dateien mit CsvHelper lesen
Dies ist die CSV-Beispieldatei, die drei Textspalten und eine Zahlenspalte enthält.
'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
$vbLabelText $csharpLabel
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
$vbLabelText $csharpLabel
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
$vbLabelText $csharpLabel
Der Typ der Daten ist IEnumerable. CsvHelper ordnet jede Spalte automatisch der Eigenschaft mit demselben Namen zu. Zum Beispiel wird der Wert in der Spalte Vorname in Person.Vorname abgebildet. Wir können dann die Daten iterieren und auf die Werte in jeder Zeile zugreifen.
5.2. Daten in CSV-Dateien von einem Typ in einen anderen konvertieren
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
$vbLabelText $csharpLabel
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.
6. Lizenzvergabe
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.
7. Zusammenfassung und Schlussfolgerung
Zusammenfassung
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.
Schlussfolgerung
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.
Bevor er Software-Ingenieur wurde, promovierte Kannapat an der Universität Hokkaido in Japan im Bereich Umweltressourcen. Während seines Studiums wurde Kannapat auch Mitglied des Vehicle Robotics Laboratory, das Teil der Abteilung für Bioproduktionstechnik ist. Im Jahr 2022 wechselte er mit seinen C#-Kenntnissen zum Engineering-Team von Iron Software, wo er sich auf IronPDF konzentriert. Kannapat schätzt an seiner Arbeit, dass er direkt von dem Entwickler lernt, der den Großteil des in IronPDF verwendeten Codes schreibt. Neben dem kollegialen Lernen genießt Kannapat auch den sozialen Aspekt der Arbeit bei Iron Software. Wenn er nicht gerade Code oder Dokumentationen schreibt, kann man Kannapat normalerweise beim Spielen auf seiner PS5 oder beim Wiedersehen mit The Last of Us antreffen.
< PREVIOUS Ein Vergleich zwischen IronXL und CsvWriter