在實際環境中測試
在生產環境中測試無浮水印。
在任何需要的地方都能運作。
在這個初學者的教程中,我們將會看到如何讀取CSV檔案進入一個C# 清單使用該IronXL圖書館 嗯,這是在任何程式語言中你需要了解的最基本的事情之一,因為 CSV 檔案是一種非常常見的資料存儲和從一個系統或應用程式轉移到另一個系統或應用程式的方式。 我們將從設置您的項目到有效解析 CSV 文件涵蓋所有內容。
在 Visual Studio 中創建一個 C# 控制台專案。
使用 NuGet 套件管理器安裝 C# CSV 函式庫。
使用 WorkBook.LoadCSV
方法加載 CSV 文件。
從檔案中讀取數據值並填入列表。
打開 Visual Studio:在您的電腦上啟動 Visual Studio。
建立新專案:點擊「建立新專案」。 這會開啟一個視窗,您可以在此選擇專案類型。
選擇專案類型:選擇「控制台應用程式」(.NET Core)「為簡化而選擇作為您的專案類型。」
命名您的項目:將您的項目命名為 CSVFileReader。
選擇位置:在您的設備上選擇一個合適的位置來保存此專案。
開啟 NuGet 套件管理員:在 Visual Studio 中,進入「工具」選單,然後選擇「NuGet 套件管理員」,再選擇「管理方案的 NuGet 套件...」。
瀏覽 IronXL:點擊「瀏覽」標籤並搜索「IronXL.Excel」。
安裝 IronXL:在搜尋結果中找到 IronXL 套件,選擇它並點擊「安裝」。確保您同意任何許可協議並檢查變更。
檢查安裝:安裝後,您應該在專案的引用中看到 IronXL。
現在,您的 CSVFileReader 專案已經設置了 IronXL 程式庫,您可以開始使用 C# 讀取和處理 CSV 文件。 這個設置構成了我們在本教程後續部分即將進行的 CSV 讀取任務的基礎。
在專案設置完成且安裝了IronXL庫後,我們來專注於解析和處理CSV文件。 我們將在您的 CSVFileReader 專案中自動生成的 Program.cs
檔案中工作。
在我們可以讀取任何數據之前,我們需要知道我們的 CSV 文件位於何處。 在 Main
方法中定義一個變數來儲存檔案路徑。
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
IronXL 使載入 CSV 文件變得簡單。使用 WorkBook.LoadCSV
方法將 CSV 文件讀入 WorkBook
對象。
var csv = WorkBook.LoadCSV(filename);
var csv = WorkBook.LoadCSV(filename);
Dim csv = WorkBook.LoadCSV(filename)
創建一個類來表示您的 CSV 文件中的數據結構。例如,如果您的 CSV 包含有關人員的信息,則定義一個 Person
類,如下所示:
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
在此步驟中,我們將解析 CSV 文件並填充一個 List
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
在此解析過程中,我們首先初始化一個 List<Person>
將解析後的數據存儲起來,並使用一個布林標誌isFirstRow
來跳過CSV文件的標題行。`foreach
迴圈會遍歷 CSV 文件的每一行。在第一次迭代期間,識別並跳過標題行,確保僅處理數據行。 然後,我們檢查每一行,以確保它不是空的,使用row.IsEmpty
。 這個步驟對於避免空行解析錯誤至關重要。
對於每一行數據,我們將該行轉換為一個單元格數組(row.ToArray()``` ```)然後使用這些數據創建一個
Person對象。 正確分析和轉換數據類型至關重要,例如將“Age”字符串轉換為整數。 接著將解析出的
Person物件加入我們的
people` 列表。這種方法確保只有有效的數據列被處理和儲存,有效地處理可能出現的問題,如數字列中的非數字字串或意外的空行。
將 CSV 數據解析為我們的 `List
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
以下是完整的 Program.cs 代碼:
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
當您運行該文件時,它將在控制台中顯示列表的數據:
在處理 CSV 文件中的各種數據類型時,為每個數據列的特定類型調整解析邏輯是很重要的。 在 Person
類別範例中,Name
是字串,可以直接使用 StringValue
指派,但像 Age
這樣的數字欄位需要使用 Int32.Parse
或 Convert.ToInt32
將字串轉換為整數。 這對於避免型別不匹配錯誤至關重要。
對於更複雜的數據類型,例如日期,使用 DateTime.Parse
將日期的字串表示轉換為 DateTime
物件。 重要的是要注意 CSV 文件中使用的日期格式,並確保它與您程式碼中預期的格式相符。 不一致的日期格式可能導致解析錯誤或數據解釋不正確。
您剛剛學習了如何使用 C# 中的 IronXL 來讀取、解析和顯示 CSV 文件的數據。 這種方法可以用於不同類型的資料結構和檔案格式。 因此,這對於所有將C#作為其主要語言選擇的開發者來說,都是一項非常有用的技能。
IronXL 提供一個免費試用供使用者體驗其功能。 試用期結束後,IronXL 的授權價格從 $749 起開始計費。
請記住,例外和邊緣情況必須妥善處理,以編寫更健壯的代碼,特別是在處理不同數據類型和使用大型文件時。 繼續嘗試和探索IronXL的更多功能,以增強您在C#中處理數據的能力。 編碼快樂!