使用IRONXL

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

發佈 2024年1月27日
分享:

介紹

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

先決條件

在深入探討之前,請確保您已經:

  • C# 基本知識
  • Visual Studio 已安裝在您的本地機器上
  • 可透過 NuGet 套件管理器獲得的 IronXL 庫

理解基礎知識

什麼是 CSV 文件?

CSV 檔案(逗號分隔值檔案)是一種使用特定結構來排列表格數據的純文本文件類型。 作為數據交換的常見格式,CSV 簡單、緊湊,並可用於多種平台。 在 CSV 檔案中,數據以逗號分隔,每一行代表一個新的行,且欄位標題通常位於第一行,int i。

了解 C# 中的 DataTable

DataTable 是 C# 中 ADO.NET 庫的一部分,表示一個在記憶體中的資料表。 它由行和列組成,每個列可以是不同的數據類型。 DataTables 高度靈活,可以以結構化格式表示數據,非常適合處理 CSV 文件數據。

設定您的專案

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

  1. 打開 Visual Studio。

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

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

步驟 2:安裝 IronXL

IronXL 是一個強大的函式庫,可讓您處理Excel和 CSV 檔案在 C# 中。 要使用它,您需要通過 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 檔案的路徑。

步驟 4:將 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 文件第一行中出現的列字符串標題行。

步驟 5:在您的應用程式中使用該方法

現在,在您的應用程式中使用 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 的許可證。

程式碼輸出

一旦您運行代碼,它將加載 CSV 文件並將其數據導入到 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# 中的清單