使用IRONXL

如何在C#中將CSV導入到Datatable

發佈 2024年1月27日
分享:

介紹

歡迎來到這個初學者的導入 CSV 教程 (逗號分隔值) 文件轉換成 資料表 在 C# 中使用 IronXL本指南將為您提供一個易於遵循的方法,即使您是 C# 新手,也會覺得此過程非常簡單。我們將涵蓋每一個步驟,從設定環境到撰寫源代碼。完成本教程後,您將清楚了解如何將 CSV 數據轉換為 Datatable,管理 Datatable 列,並使用 var reader 和連接字符串在 C# 中處理 CSV 文檔的各個方面。

必要條件

在我們開始之前,請確保您已經具備:

  • 基本的 C# 知識
  • 在本地機器上安裝了 Visual Studio
  • 可以通過 NuGet 套件管理器獲取的 IronXL 庫

理解基礎知識

什麼是 CSV 文件?

CSV 文件 (逗號分隔值檔案) 是一種使用特定結構來排列表格數據的純文字檔案格式。CSV 是一種常見的數據交換格式,因為它簡單、緊湊,且適用於許多平台。在 CSV 檔案中,數據由逗號分隔,每一行表示一個新的行,且欄位標題通常在第一行。

理解 C# 中的 DataTables

DataTable 是 ADO.NET 庫的一部分,用於代表存儲在內存中的單個表格數據。它包括行和列,每個列可以是不同的數據類型。DataTable 非常靈活,可以以結構化的格式表示數據,使其非常適合處理 CSV 文件數據。

設定您的專案

第一步:建立一個新的C#專案

  1. 開啟Visual Studio。

  2. 選擇 檔案 > 新增 > 專案

  3. 選擇C#主控台應用程式或Windows Forms應用程式,並適當命名。

第2步:安裝 IronXL

IronXL 是一個強大的程式庫,能夠讓你 處理Excel 在C#中使用和CSV文件。要使用它,您需要通過NuGet包管理器安裝它。在Visual Studio中:

  1. 轉到 工具 > NuGet 包管理員 > 管理 NuGet 套件

  2. 搜索 IronXL.Excel

    如何在C#中將CSV導入到DataTable中:圖1 - IronXL

  3. 將套件安裝到您的專案中。

使用IronXL將CSV文件讀入DataTables

第1步:設定您的環境

using IronXL;
using System.Data;
using IronXL;
using System.Data;
Imports IronXL
Imports System.Data
VB   C#

這些 using 語句包含了我們任務所需的命名空間。

步驟 2:創建導入 CSV 的方法

定義一個類,CsvToDataTable,其中包含一個靜態方法 ImportCsvToDataTable。此方法將負責將 CSV 文件轉換為 DataTable

public class CsvToDataTable
{
    public static DataTable ImportCsvToDataTable(string filePath)
    {
        // Code snippet to import CSV will be placed here
    }
}
public class CsvToDataTable
{
    public static DataTable ImportCsvToDataTable(string filePath)
    {
        // Code snippet to import CSV will be placed here
    }
}
Public Class CsvToDataTable
	Public Shared Function ImportCsvToDataTable(ByVal filePath As String) As DataTable
		' Code snippet to import CSV will be placed here
	End Function
End Class
VB   C#

第 3 步:加載 CSV 文件

ImportCsvToDataTable 方法內,首先加載 CSV 文件。IronXL 提供了一種簡單的方法來完成此操作:

// Load the CSV file
WorkBook workbook = WorkBook.LoadCSV(filePath);
// Load the CSV file
WorkBook workbook = WorkBook.LoadCSV(filePath);
' Load the CSV file
Dim workbook As WorkBook = WorkBook.LoadCSV(filePath)
VB   C#

WorkBook.LoadCSV 是 IronXL 中用來載入 CSV 檔案的方法。這裡,filePath 是您的 CSV 檔案路徑。

第四步:將 CSV 轉換為 DataTable

將載入的 CSV 數據轉換為 DataTable。這一步是主要步驟,因為它將數據轉換為一種可以在 C# 應用程式中輕鬆操作和顯示的格式。

// Get the first worksheet
WorkSheet sheet = workbook.DefaultWorkSheet;
// Convert CSV worksheet to DataTable dt
DataTable dataTable = sheet.ToDataTable();
return dataTable;
// Get the first worksheet
WorkSheet sheet = workbook.DefaultWorkSheet;
// Convert CSV worksheet to DataTable dt
DataTable dataTable = sheet.ToDataTable();
return dataTable;
' Get the first worksheet
Dim sheet As WorkSheet = workbook.DefaultWorkSheet
' Convert CSV worksheet to DataTable dt
Dim dataTable As DataTable = sheet.ToDataTable()
Return dataTable
VB   C#

此程式碼片段將 CSV 資料轉換為 DataTableDefaultWorkSheet 會從工作簿中獲取第一個工作表,這在 CSV 文件的情況下相當於整個 CSV 資料。ToDataTable 方法是 IronXL 的一個強大功能,它能夠高效地將 CSV 資料映射到 DataTable 結構中,包括如果 CSV 文件的第一行中存在列字串標頭行。

第五步:在應用程式中使用該方法

現在,在您的應用程式中使用 ImportCsvToDataTable 方法。例如,您可能想在應用程式啟動時或用戶上傳 CSV 檔案時調用此方法。

// Usage
string csvFilePath = "csvfile.csv";
DataTable dataTable = CsvToDataTable.ImportCsvToDataTable(csvFilePath);
// Usage
string csvFilePath = "csvfile.csv";
DataTable dataTable = CsvToDataTable.ImportCsvToDataTable(csvFilePath);
' Usage
Dim csvFilePath As String = "csvfile.csv"
Dim dataTable As DataTable = CsvToDataTable.ImportCsvToDataTable(csvFilePath)
VB   C#

此代碼片段演示了如何調用 ImportCsvToDataTable 方法。請將 "csvfile.csv" 替換為您實際的 CSV 檔案路徑。

第六步:處理輸出 DataTable

一旦您有了 DataTable,您可以執行各種操作,例如在用戶界面上顯示數據、過濾或處理數據。以下是一些示例:

在控制台應用程式中顯示數據

foreach (DataRow row in dataTable.Rows)
{
    foreach (var item in row.ItemArray)
    {
        Console.Write($"{item} ");
    }
    Console.WriteLine();
}
foreach (DataRow row in dataTable.Rows)
{
    foreach (var item in row.ItemArray)
    {
        Console.Write($"{item} ");
    }
    Console.WriteLine();
}
For Each row As DataRow In dataTable.Rows
	For Each item In row.ItemArray
		Console.Write($"{item} ")
	Next item
	Console.WriteLine()
Next row
VB   C#

此代碼會迭代 DataTable 中的每一行和每一列,並將數據打印到控制台。

過濾數據

您可以使用LINQ來過濾DataTable中的數據。例如,如果您想選擇某一特定列符合某個條件的行:

var filteredRows = dataTable.AsEnumerable()
                            .Where(row => row.Field<string>("ColumnName") == "SomeValue");
var filteredRows = dataTable.AsEnumerable()
                            .Where(row => row.Field<string>("ColumnName") == "SomeValue");
Dim filteredRows = dataTable.AsEnumerable().Where(Function(row) row.Field(Of String)("ColumnName") = "SomeValue")
VB   C#

"ColumnName""SomeValue" 替換成您要篩選的欄位名稱和值。

完整程式碼片段

以下是可以在您的專案中使用的完整原始碼:

using IronXL;
using System;
using System.Data;
using System.IO;
public class CsvToDataTable
{
    public static DataTable ImportCsvToDataTable(string filePath)
    {
        // Check if the file exists
        if (!File.Exists(filePath))
        {
            throw new FileNotFoundException($"The file at {filePath} was not found.");
        }
        // Load the CSV file
        WorkBook workbook = WorkBook.LoadCSV(filePath, listDelimiter: ";");
        // Get the first worksheet
        WorkSheet sheet = workbook.DefaultWorkSheet;
        // Convert the worksheet to DataTable
        DataTable dataTable = sheet.ToDataTable();
        return dataTable;
    }
}
class Program
{
    static void Main(string [] args)
    {
        // Usage
        try
        {
            string strfilepath = "sample_data.csv"; // CSV file path
            DataTable dataTable = CsvToDataTable.ImportCsvToDataTable(strfilepath);
            foreach (DataRow row in dataTable.Rows)
            {
                foreach (var item in row.ItemArray)
                {
                    Console.Write($"{item} ");
                }
                Console.WriteLine();
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine($"An error occurred: {ex.Message}");
        }
    }
}
using IronXL;
using System;
using System.Data;
using System.IO;
public class CsvToDataTable
{
    public static DataTable ImportCsvToDataTable(string filePath)
    {
        // Check if the file exists
        if (!File.Exists(filePath))
        {
            throw new FileNotFoundException($"The file at {filePath} was not found.");
        }
        // Load the CSV file
        WorkBook workbook = WorkBook.LoadCSV(filePath, listDelimiter: ";");
        // Get the first worksheet
        WorkSheet sheet = workbook.DefaultWorkSheet;
        // Convert the worksheet to DataTable
        DataTable dataTable = sheet.ToDataTable();
        return dataTable;
    }
}
class Program
{
    static void Main(string [] args)
    {
        // Usage
        try
        {
            string strfilepath = "sample_data.csv"; // CSV file path
            DataTable dataTable = CsvToDataTable.ImportCsvToDataTable(strfilepath);
            foreach (DataRow row in dataTable.Rows)
            {
                foreach (var item in row.ItemArray)
                {
                    Console.Write($"{item} ");
                }
                Console.WriteLine();
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine($"An error occurred: {ex.Message}");
        }
    }
}
Imports IronXL
Imports System
Imports System.Data
Imports System.IO
Public Class CsvToDataTable
	Public Shared Function ImportCsvToDataTable(ByVal filePath As String) As DataTable
		' Check if the file exists
		If Not File.Exists(filePath) Then
			Throw New FileNotFoundException($"The file at {filePath} was not found.")
		End If
		' Load the CSV file
		Dim workbook As WorkBook = WorkBook.LoadCSV(filePath, listDelimiter:= ";")
		' Get the first worksheet
		Dim sheet As WorkSheet = workbook.DefaultWorkSheet
		' Convert the worksheet to DataTable
		Dim dataTable As DataTable = sheet.ToDataTable()
		Return dataTable
	End Function
End Class
Friend Class Program
	Shared Sub Main(ByVal args() As String)
		' Usage
		Try
			Dim strfilepath As String = "sample_data.csv" ' CSV file path
			Dim dataTable As DataTable = CsvToDataTable.ImportCsvToDataTable(strfilepath)
			For Each row As DataRow In dataTable.Rows
				For Each item In row.ItemArray
					Console.Write($"{item} ")
				Next item
				Console.WriteLine()
			Next row
		Catch ex As Exception
			Console.WriteLine($"An error occurred: {ex.Message}")
		End Try
	End Sub
End Class
VB   C#

您可以在 Program.cs 文件中使用此代碼。如果您在生產環境中工作,請勿忘記添加 IronXL 的許可證。

Output Of Code

一旦你執行代碼,它將加載CSV文件並將其數據導入到DataTable。之後,它會在控制台中顯示DataTable列的內容。這有助於驗證數據是否正確導入到DataTable。

如何在 C# 中將 CSV 導入到 DataTable:圖 2 - 輸出

處理不同的情境

在現實世界的情境中,CSV 文件在格式和結構上可能有顯著差異。為了確保應用程序的穩健性和多功能性,處理這些變化是很重要的。讓我們擴展一下,說明如何在使用 IronXL 將 CSV 資料匯入 DataTable 時管理不同的情境。

處理不同的分隔符

逗號是 CSV 文件中分隔符的預設值。然而,CSV 文件不一定總是使用逗號來分隔數值。有時會使用分號、製表符或其他字符作為分隔符。要在 IronXL 中處理這種情況:

指定自定分隔符: 在加載 CSV 文件之前,你可以指定文件的分隔符。例如,如果你的文件使用分號 (),您可以這樣設置:

WorkBook workbook = WorkBook.LoadCSV(filePath, listDelimiter: ";");
WorkBook workbook = WorkBook.LoadCSV(filePath, listDelimiter: ";");
Dim workbook As WorkBook = WorkBook.LoadCSV(filePath, listDelimiter:= ";")
VB   C#

動態分隔符檢測:或者,你可以編寫一個函數來動態檢測分隔符。這可以通過分析文件的前幾行並確定出現最頻繁的特殊字符來完成。

處理大型CSV文件

當處理大型CSV文件時,考量記憶體使用量和效能是很重要的。IronXL提供了高效的方法來處理大型文件,無需一次性將整個文件載入記憶體。您可以分塊讀取文件或者利用IronXL提供的串流API來有效管理記憶體使用。

結論

使用 IronXL 在 C# 中將 CSV 數據導入 DataTable 非常簡單。它增強了應用程序的數據處理能力,允許您高效地處理 CSV 文件。通過本教程中的步驟,新手可以輕鬆地將此功能集成到他們的 C# 項目中。

IronXL 提供免費試用版,供用戶探索其功能。對於那些尋求更高級功能和支持的用戶,授權選項從 $749 開始。

< 上一頁
如何在 VB .NET 中將 Excel 文件導入 SQL 資料庫
下一個 >
如何將 CSV 檔案轉換為 C# 中的清單

準備開始了嗎? 版本: 2024.10 剛剛發布

免費 NuGet 下載 總下載次數: 1,023,839 查看許可證 >