跳過到頁腳內容
使用 IRONXL
如何在 C# 中導入 CSV 到 DataTable | IronXL

如何在C#中將CSV導入數據表

Welcome to this beginner's tutorial on importing CSV (comma-separated values) files into a DataTable in C# using IronXL. 本指南將為您提供一種易於遵循的方法,確保即使您是C#的新手,您也會覺得此過程簡單易行。 我們將涵蓋從設置環境到編寫源代碼的每個步驟。 在本教程結束時,您將清楚地了解如何將CSV數據轉換為DataTable,管理DataTable列以及使用文件閱讀器和IronXL處理CSV文檔的各個方面。

先決條件

在我們深入研究之前,請確保您擁有:

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

理解基礎知識

什麼是CSV文件?

CSV文件(逗號分隔值文件)是一種使用特定結構來安排表格數據的純文本文件。 由於CSV簡單、緊湊,並且可以在多個平台上使用,因此它是數據交換的常見格式。 在CSV文件中,數據由逗號分隔,每一行都表示一個新行,列標題通常出現在第一行。

理解C#中的DataTables

DataTable是C#中ADO.NET庫的一部分,代表內存中數據的單個表。 它包括行和列,每個列可以有不同的數據類型。 DataTables靈活性高,可以以結構化格式表示數據,這使得它們非常適合處理CSV文件數據。

設置您的項目

步驟1:創建一個新的C#項目

  1. 打開 Visual Studio。
  2. 選擇文件 > 新建 > 項目
  3. 選擇C#控制台或Windows窗體應用程序,並適當命名。

步驟2:安裝IronXL

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

  1. 前往工具 > NuGet包管理器 > 管理解決方案的NuGet包
  2. 搜索IronXL.Excel

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

  1. 將包安裝到您的項目中。

使用IronXL將CSV文件讀取到DataTables中

步驟1:設置您的環境

using IronXL;
using System.Data;
using IronXL;
using System.Data;
Imports IronXL
Imports System.Data
$vbLabelText   $csharpLabel

這些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
        return null; // Placeholder return statement
    }
}
public class CsvToDataTable
{
    public static DataTable ImportCsvToDataTable(string filePath)
    {
        // Code snippet to import CSV will be placed here
        return null; // Placeholder return statement
    }
}
Public Class CsvToDataTable
	Public Shared Function ImportCsvToDataTable(ByVal filePath As String) As DataTable
		' Code snippet to import CSV will be placed here
		Return Nothing ' Placeholder return statement
	End Function
End Class
$vbLabelText   $csharpLabel

步驟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)
$vbLabelText   $csharpLabel

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
DataTable dataTable = sheet.ToDataTable();
return dataTable;
// Get the first worksheet
WorkSheet sheet = workbook.DefaultWorkSheet;
// Convert CSV worksheet to DataTable
DataTable dataTable = sheet.ToDataTable();
return dataTable;
' Get the first worksheet
Dim sheet As WorkSheet = workbook.DefaultWorkSheet
' Convert CSV worksheet to DataTable
Dim dataTable As DataTable = sheet.ToDataTable()
Return dataTable
$vbLabelText   $csharpLabel

此代碼片段將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)
$vbLabelText   $csharpLabel

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

步驟6:使用輸出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
$vbLabelText   $csharpLabel

此代碼遍歷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")
$vbLabelText   $csharpLabel

"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);
        // 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 filePath = "sample_data.csv"; // CSV file path
            DataTable dataTable = CsvToDataTable.ImportCsvToDataTable(filePath);
            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);
        // 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 filePath = "sample_data.csv"; // CSV file path
            DataTable dataTable = CsvToDataTable.ImportCsvToDataTable(filePath);
            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)
		' 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 filePath As String = "sample_data.csv" ' CSV file path
			Dim dataTable As DataTable = CsvToDataTable.ImportCsvToDataTable(filePath)
			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
$vbLabelText   $csharpLabel

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

代碼輸出

運行代碼後,它將加載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:= ";")
$vbLabelText   $csharpLabel

處理大型CSV文件

在處理大型CSV文件時,考慮內存用量和性能非常重要。 IronXL提供了有效的方法來處理大型文件,而不是一次將整個文件加載到內存中。 您可以分塊讀取文件或利用IronXL提供的流API來有效地管理內存使用量。

結論

使用IronXL在C#中將CSV數據導入DataTable是簡單的。 它增強了應用程序的數據處理功能,使您可以有效地處理CSV文件。 通過本教程中列出的步驟,初學者可以輕鬆將此功能整合到他們的C#項目中。

IronXL為用戶提供免費試用,以探索其功能。 對於那些尋求更多高級功能和支持的人,許可選項是可用的。

常見問題解答

如何在 C# 中將 CSV 數據導入 DataTable?

您可以使用 IronXL 的 WorkBook.LoadCSV 方法加載 CSV 文件,然後使用 ToDataTable 方法將其轉換為 DataTable。

設置使用 IronXL 的 Visual Studio 項目需要哪些步驟?

要設置使用 IronXL 的 Visual Studio 項目,請通過導航到工具 > NuGet 包管理器 > 為解決方案管理 NuGet 包來安裝 IronXL 包,然後搜索 IronXL.Excel 並將其添加到您的項目中。

IronXL 能處理帶有不同分隔符的 CSV 文件嗎?

是的,IronXL 可以通過在 WorkBook.LoadCSV 方法中使用 listDelimiter 參數指定自定義分隔符來處理帶有不同分隔符的 CSV 文件。

加載 CSV 文件時遇到"找不到文件"錯誤時應該怎麼辦?

如果遇到"找不到文件"錯誤,請確保文件路徑正確。使用 File.Exists(filePath) 檢查文件是否存在以防止此類錯誤。

如何在 C# 中高效管理大型 CSV 文件?

為了高效管理大型 CSV 文件,IronXL 提供了以塊讀取文件或使用流 API 的功能,有助於優化內存使用和性能。

CSV 數據轉換為 DataTable 有什麼好處?

將 CSV 數據轉換為 DataTable 能夠進行結構化數據操作,使其更容易在 C# 應用程序中處理、篩選和顯示數據。

如何在 C# 控制台應用程序中顯示 DataTable 內容?

要在 C# 控制台應用程序中顯示 DataTable 內容,請迭代遍歷每個 DataRow 並使用嵌套循環打印每個項目以在控制台顯示數據。

CSV 文件是什麼,為什麼它有用?

CSV 文件,或逗號分隔值文件,是一種用逗號分隔數據的純文本文件。由於其簡單性和與許多應用程序的兼容性,它被廣泛用於數據交換。

導入 CSV 到 DataTable 教程需要哪些前提條件?

要遵循教程,您需要對 C# 有基本的了解,在您的計算機上安裝了 Visual Studio,以及可以通過 NuGet 包管理器獲得的 IronXL 庫。

Jordi Bardia
軟體工程師
Jordi 在 Python、C# 和 C++ 上最得心應手,當他不在 Iron Software 展現技術時,便在做遊戲編程。在分担产品测测试,产品开发和研究的责任时,Jordi 为持续的产品改进增值。他说这种多样化的经验使他受到挑战并保持参与, 而这也是他与 Iron Software 中工作一大乐趣。Jordi 在佛罗里达州迈阿密长大,曾在佛罗里达大学学习计算机科学和统计学。