在實際環境中測試
在生產環境中測試無浮水印。
在任何需要的地方都能運作。
歡迎來到這個關於匯入 CSV 的初學者教程(逗號分隔值)文件轉換成資料表在 C# 中使用IronXL. 本指南將為您提供一個易於遵循的方法,即使您是 C# 的新手,也會覺得此過程簡單明瞭。 我們將涵蓋從設置環境到編寫源代碼的每個步驟。 在本教程結束時,您將清楚了解如何將 CSV 數據轉換為 Datatable、管理 Datatable 列以及在 C# 中使用 var reader 和連接字串處理 CSV 文檔的各種方面。
在深入探討之前,請確保您已經:
CSV 檔案(逗號分隔值檔案)是一種使用特定結構來排列表格數據的純文本文件類型。 作為數據交換的常見格式,CSV 簡單、緊湊,並可用於多種平台。 在 CSV 檔案中,數據以逗號分隔,每一行代表一個新的行,且欄位標題通常位於第一行,int i。
DataTable 是 C# 中 ADO.NET 庫的一部分,表示一個在記憶體中的資料表。 它由行和列組成,每個列可以是不同的數據類型。 DataTables 高度靈活,可以以結構化格式表示數據,非常適合處理 CSV 文件數據。
打開 Visual Studio。
選擇 檔案 > 新增 > 專案。
IronXL 是一個強大的函式庫,可讓您處理Excel和 CSV 檔案在 C# 中。 要使用它,您需要通過 NuGet 套件管理器安裝。 在 Visual Studio 中:
移至 工具 > NuGet 套件管理員 > 管理解決方案的 NuGet 套件。
搜尋 IronXL.Excel。
using IronXL;
using System.Data;
using IronXL;
using System.Data;
Imports IronXL
Imports System.Data
這些 using 語句包含了我們任務所需的命名空間。
定義一個類別,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
在 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)
WorkBook.LoadCSV 是 IronXL 中用於加載 CSV 檔案的方法。 在這裡,filePath 是您的 CSV 檔案的路徑。
將載入的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
此程式碼片段將 CSV 資料轉換為 DataTable。 DefaultWorkSheet 從工作簿中獲取第一個工作表,在 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)
此代碼片段演示了如何調用ImportCsvToDataTable方法。 將 "csvfile.csv" 替換為您的 CSV 文件的實際文件路徑。
一旦有了 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
此代碼會迭代 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")
將 "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
您可以在 Program.cs 文件中使用此代碼。如果您在生產環境中工作,請勿忘記添加 IronXL 的許可證。
一旦您運行代碼,它將加載 CSV 文件並將其數據導入到 DataTable。 之後,它會在控制台顯示資料表欄位的內容。 它有助於驗證數據是否正確導入到 DataTable。
在現實世界的情境中,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:= ";")
動態分隔符檢測: 或者,你可以編寫一個函式來動態檢測分隔符。 這可以通過分析文件的前幾行並確定出現頻率最高的特殊字符來完成。
處理大型 CSV 檔案時,考慮記憶體使用量和效能非常重要。 IronXL 提供有效的方法來處理大型文件,而不需要一次將整個文件加載到記憶體中。 您可以分塊讀取檔案,或利用IronXL提供的串流API以有效管理記憶體使用。
使用 IronXL 在 C# 中將 CSV 數據導入 DataTable 非常簡單。 它增強了您的應用程式的數據操作能力,使您能夠有效地處理 CSV 檔案。 透過本教程中列出的步驟,初學者可以輕鬆將此功能整合到他們的C#專案中。
IronXL 提供免費試用,讓用戶探索其功能。 對於尋求更高階功能和支持的人來說,授權選項從 $749 開始。