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);
In diesem Tutorial für Anfänger sehen wir uns an, wie mancSV-Dateien lesen in eineliste in C# unter Verwendung derIronXL bibliothek. Dies ist eines der grundlegendsten Dinge, die man in jeder Programmiersprache wissen muss, da CSV-Dateien eine sehr verbreitete Art sind, Daten zu speichern und sie von einem System oder einer Anwendung in eine andere zu übertragen. Wir behandeln alles von der Einrichtung Ihres Projekts bis zum effektiven Parsen von CSV-Dateien.
Konvertieren einer CSV-Datei in eine Liste in C#;
Erstellen Sie ein C#-Konsolenprojekt in Visual Studio.
Installieren Sie die C# CSV-Bibliothek mit NuGet Package Manager.
Laden Sie die CSV-Datei mit der Methode WorkBook.LoadCSV.
Datenwerte aus der Datei lesen und die Liste auffüllen.
Drucken Sie die Liste auf der Konsole aus.
Ihr Projekt einrichten
Schritt 1: Erstellen eines neuen C#-Projekts
Öffnen Sie Visual Studio: Starten Sie Visual Studio auf Ihrem Computer.
Ein neues Projekt erstellen: Klicken Sie auf "Ein neues Projekt erstellen". Es öffnet sich ein Fenster, in dem Sie den Projekttyp auswählen können.
Projekttyp auswählen: Wählen Sie "Console App"(.NET Core)"der Einfachheit halber als Projekttyp.
Benennen Sie Ihr Projekt: Benennen Sie Ihr Projekt CSVFileReader.
Speicherort wählen: Wählen Sie einen geeigneten Speicherort auf Ihrem Gerät, um dieses Projekt zu speichern.
Projekt generieren: Klicken Sie auf "Erstellen", um Ihr neues C#-Projekt zu initialisieren.
Schritt 2: Installieren der IronXL-Bibliothek
Öffnen Sie den NuGet-Paketmanager: Gehen Sie in Visual Studio in das Menü "Tools", wählen Sie dann "NuGet Package Manager" und wählen Sie "Manage NuGet Packages for Solution...".
Suchen Sie nach IronXL: Klicken Sie auf die Registerkarte "Durchsuchen" und suchen Sie nach "IronXL.Excel"
Installieren Sie IronXL: Suchen Sie das IronXL-Paket in den Suchergebnissen, wählen Sie es aus und klicken Sie auf "Installieren" Vergewissern Sie sich, dass Sie den Lizenzvereinbarungen zustimmen und überprüfen Sie die Änderungen.
Prüfen Sie die Installation: Nach der Installation sollte IronXL in den Referenzen Ihres Projekts referenziert sein.
Jetzt ist Ihr CSVFileReader-Projekt mit der IronXL-Bibliothek eingerichtet, und Sie sind bereit, CSV-Dateien in C# zu lesen und zu verarbeiten. Diese Einrichtung bildet die Grundlage für die CSV-Leseaufgaben, die wir in den folgenden Abschnitten dieses Lernprogramms durchführen werden.
Parsing und Verarbeitung von CSV-Dateien in C#;
Nachdem das Projekt eingerichtet und die IronXL-Bibliothek installiert ist, können wir uns nun auf das Parsen und Verarbeiten von CSV-Dateien konzentrieren. Wir werden in der Datei "Program.cs" arbeiten, die automatisch in Ihrem CSVFileReader-Projekt erstellt wird.
Schritt 1: Festlegen des Dateipfads
Bevor wir Daten lesen können, müssen wir wissen, wo sich unsere CSV-Datei befindet. Definieren Sie eine Variable in der Methode Main, um den Dateipfad zu speichern.
string filename = "csvfile.csv"; // Replace with your actual file path
string filename = "csvfile.csv"; // Replace with your actual file path
Dim filename As String = "csvfile.csv" ' Replace with your actual file path
$vbLabelText $csharpLabel
Schritt 2: Laden der CSV-Datei
IronXL macht es einfach, eine CSV-Datei zu laden. Verwenden Sie die Methode WorkBook.LoadCSV, um die CSV-Datei in ein WorkBook-Objekt zu lesen.
var csv = WorkBook.LoadCSV(filename);
var csv = WorkBook.LoadCSV(filename);
Dim csv = WorkBook.LoadCSV(filename)
$vbLabelText $csharpLabel
Schritt 3: Definieren einer Datenstruktur
Erstellen Sie eine Klasse, die die Datenstruktur in Ihrer CSV-Datei darstellt. Wenn Ihre CSV-Datei zum Beispiel Informationen über Personen enthält, definieren Sie eine Klasse "Person" wie folgt:
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
Public Class Person
Public Property Name() As String
Public Property Age() As Integer
End Class
$vbLabelText $csharpLabel
Schritt 4: Parsing von CSV-Daten
In diesem Schritt wird die CSV-Datei geparst und eine "Liste" ausgefüllt` mit den Daten. Wir verwenden IronXL zum Lesen der CSV-Datei, und der Schlüssel dazu ist die korrekte Verarbeitung jeder Zeile der CSV-Datei unter Berücksichtigung von Kopfzeilen und potenziellen Leerzeilen. Hier finden Sie eine detaillierte Aufschlüsselung des Codes:
List<Person> people = new List<Person>();
bool isFirstRow = true; // Add a flag to check for the first row
foreach (var row in csv.WorkSheets [0].Rows)
{
if (isFirstRow)
{
isFirstRow = false; // Set the flag to false after skipping the first row
continue;
}
if (row.IsEmpty) continue; // Skip empty rows
var cells = row.ToArray();
var person = new Person()
{
Name = cells [0].StringValue,
Age = int.Parse(cells [1].StringValue) // Ensure this is a numeric value
};
people.Add(person);
}
List<Person> people = new List<Person>();
bool isFirstRow = true; // Add a flag to check for the first row
foreach (var row in csv.WorkSheets [0].Rows)
{
if (isFirstRow)
{
isFirstRow = false; // Set the flag to false after skipping the first row
continue;
}
if (row.IsEmpty) continue; // Skip empty rows
var cells = row.ToArray();
var person = new Person()
{
Name = cells [0].StringValue,
Age = int.Parse(cells [1].StringValue) // Ensure this is a numeric value
};
people.Add(person);
}
Dim people As New List(Of Person)()
Dim isFirstRow As Boolean = True ' Add a flag to check for the first row
For Each row In csv.WorkSheets (0).Rows
If isFirstRow Then
isFirstRow = False ' Set the flag to false after skipping the first row
Continue For
End If
If row.IsEmpty Then
Continue For ' Skip empty rows
End If
Dim cells = row.ToArray()
Dim person As New Person() With {
.Name = cells (0).StringValue,
.Age = Integer.Parse(cells (1).StringValue)
}
people.Add(person)
Next row
$vbLabelText $csharpLabel
Bei diesem Parsing-Prozess wird zunächst eine Liste<Person>um die geparsten Daten zu speichern und ein boolesches FlagisFirstRowzu verwenden, um die Kopfzeile der CSV-Datei zu überspringen. Dieforeach'-Schleife durchläuft jede Zeile der CSV-Datei. Bei der ersten Iteration wird die Kopfzeile identifiziert und übersprungen, um sicherzustellen, dass nur Datenzeilen verarbeitet werden. Anschließend wird jede Zeile mit row.IsEmpty überprüft, um sicherzustellen, dass sie nicht leer ist. Dieser Schritt ist wichtig, um Parsing-Fehler bei leeren Zeilen zu vermeiden.
Für jede Datenzeile konvertieren wir die Zeile in ein Array von Zellen(row.ToArray()) und erstellen dann ein "Person"-Objekt mit diesen Daten. Es ist wichtig, die Datentypen korrekt zu analysieren und zu konvertieren, z. B. die Zeichenkette "Alter" in eine ganze Zahl umzuwandeln. Das geparste "Person"-Objekt wird dann zu unserer "Personen"-Liste hinzugefügt. Auf diese Weise wird sichergestellt, dass nur gültige Datenzeilen verarbeitet und gespeichert werden, so dass potenzielle Probleme wie nichtnumerische Zeichenfolgen in numerischen Spalten oder unerwartete leere Zeilen wirksam behandelt werden.
Schritt 5: Anzeige der Daten
Nach dem Parsen der CSV-Daten in unsere `Listder nächste wichtige Schritt besteht darin, die Daten anzuzeigen und zu überprüfen. So können wir nicht nur sicherstellen, dass unser Parsing erfolgreich war, sondern auch die Ausgabe beobachten und eine schnelle Überprüfung der Datenqualität durchführen. So können Sie dies umsetzen:
foreach (var person in people)
{
Console.WriteLine($"Name: {person.Name}, Age: {person.Age}");
}
foreach (var person in people)
{
Console.WriteLine($"Name: {person.Name}, Age: {person.Age}");
}
For Each person In people
Console.WriteLine($"Name: {person.Name}, Age: {person.Age}")
Next person
$vbLabelText $csharpLabel
Hier ist der vollständige Program.cs-Code:
using IronXL;
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
class Program
{
static void Main(string [] args)
{
string filename = @"C:\Users\tayya\Downloads\sample_data.csv"; // Replace with your actual file path
var csv = WorkBook.LoadCSV(filename);
List<Person> people = new List<Person>();
bool isFirstRow = true; // Add a flag to check for the first row
foreach (var row in csv.WorkSheets [0].Rows)
{
if (isFirstRow)
{
isFirstRow = false; // Set the flag to false after skipping the first row
continue;
}
if (row.IsEmpty) continue; // Skip empty rows
var cells = row.ToArray();
var person = new Person()
{
Name = cells [0].StringValue,
Age = int.Parse(cells [1].StringValue) // Ensure this is a numeric value
};
people.Add(person);
}
foreach (var person in people)
{
Console.WriteLine($"Name: {person.Name}, Age: {person.Age}");
}
}
}
using IronXL;
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
class Program
{
static void Main(string [] args)
{
string filename = @"C:\Users\tayya\Downloads\sample_data.csv"; // Replace with your actual file path
var csv = WorkBook.LoadCSV(filename);
List<Person> people = new List<Person>();
bool isFirstRow = true; // Add a flag to check for the first row
foreach (var row in csv.WorkSheets [0].Rows)
{
if (isFirstRow)
{
isFirstRow = false; // Set the flag to false after skipping the first row
continue;
}
if (row.IsEmpty) continue; // Skip empty rows
var cells = row.ToArray();
var person = new Person()
{
Name = cells [0].StringValue,
Age = int.Parse(cells [1].StringValue) // Ensure this is a numeric value
};
people.Add(person);
}
foreach (var person in people)
{
Console.WriteLine($"Name: {person.Name}, Age: {person.Age}");
}
}
}
Imports IronXL
Public Class Person
Public Property Name() As String
Public Property Age() As Integer
End Class
Friend Class Program
Shared Sub Main(ByVal args() As String)
Dim filename As String = "C:\Users\tayya\Downloads\sample_data.csv" ' Replace with your actual file path
Dim csv = WorkBook.LoadCSV(filename)
Dim people As New List(Of Person)()
Dim isFirstRow As Boolean = True ' Add a flag to check for the first row
For Each row In csv.WorkSheets (0).Rows
If isFirstRow Then
isFirstRow = False ' Set the flag to false after skipping the first row
Continue For
End If
If row.IsEmpty Then
Continue For ' Skip empty rows
End If
Dim cells = row.ToArray()
Dim person As New Person() With {
.Name = cells (0).StringValue,
.Age = Integer.Parse(cells (1).StringValue)
}
people.Add(person)
Next row
For Each person In people
Console.WriteLine($"Name: {person.Name}, Age: {person.Age}")
Next person
End Sub
End Class
$vbLabelText $csharpLabel
Ausgabe des Codes
Wenn Sie die Datei ausführen, werden die Daten der Liste in der Konsole angezeigt:
Umgang mit verschiedenen Datentypen
Bei der Verarbeitung verschiedener Datentypen in einer CSV-Datei ist es wichtig, die Parsing-Logik an den spezifischen Typ jeder Datenspalte anzupassen. Im Beispiel der Klasse "Person" ist "Name" eine Zeichenkette und kann mit "StringValue" direkt zugewiesen werden, während numerische Felder wie "Alter" mit "Int32.Parse" oder "Convert.ToInt32" von Zeichenketten in Ganzzahlen umgewandelt werden müssen. Dies ist wichtig, um Fehler bei der Typübereinstimmung zu vermeiden.
Für komplexere Datentypen, wie z.B. Datumsangaben, verwenden Sie DateTime.Parse, um String-Darstellungen von Datumsangaben in DateTime-Objekte zu konvertieren. Es ist wichtig, das in Ihrer CSV-Datei verwendete Datumsformat zu kennen und sicherzustellen, dass es mit dem erwarteten Format in Ihrem Code übereinstimmt. Inkonsistente Datumsformate können zu Parsing-Fehlern oder falscher Dateninterpretation führen.
Schlussfolgerung
Sie haben soeben gelernt, wie man mit IronXL in C# die Daten einer CSV-Datei liest, parst und anzeigt. Dieser Ansatz kann auf verschiedene Arten von Datenstrukturen und Dateiformaten angewendet werden. Dies ist also eine insgesamt nützliche Fähigkeit für jeden Entwickler, der C# als Hauptsprache seiner Wahl einsetzt.
IronXL bietet einekostenloser Test damit die Nutzer die Funktionen kennenlernen können. Sobald die Testphase abgeschlossen ist, beginnt die Lizenzierung von IronXL zu einem Startpreis von $749.
Denken Sie daran, dass Ausnahmen und Randfälle behandelt werden müssen, um einen robusteren Code zu schreiben, insbesondere bei der Verwaltung verschiedener Datentypen und der Verwendung großer Dateien. Experimentieren Sie weiter und erkunden Sie weitere Funktionen von IronXL, um die Verarbeitung Ihrer Daten in C# zu verbessern. Fröhliches Kodieren!
Jordi beherrscht vor allem Python, C# und C++. Wenn er seine Fähigkeiten bei Iron Software nicht einsetzt, programmiert er Spiele. Durch seine Mitverantwortung für Produkttests, Produktentwicklung und Forschung trägt Jordi wesentlich zur kontinuierlichen Produktverbesserung bei. Die vielseitigen Erfahrungen, die er sammelt, bieten ihm immer wieder neue Herausforderungen, und er sagt, dass dies einer seiner Lieblingsaspekte bei Iron Software ist. Jordi wuchs in Miami, Florida, auf und studierte Informatik und Statistik an der University of Florida.