在實際環境中測試
在生產環境中測試無浮水印。
在任何需要的地方都能運作。
歡迎來到這個初學者的導入 CSV 教程 (逗號分隔值) 文件轉換成 資料表 在 C# 中使用 IronXL本指南將為您提供一個易於遵循的方法,即使您是 C# 新手,也會覺得此過程非常簡單。我們將涵蓋每一個步驟,從設定環境到撰寫源代碼。完成本教程後,您將清楚了解如何將 CSV 數據轉換為 Datatable,管理 Datatable 列,並使用 var reader 和連接字符串在 C# 中處理 CSV 文檔的各個方面。
在我們開始之前,請確保您已經具備:
CSV 文件 (逗號分隔值檔案) 是一種使用特定結構來排列表格數據的純文字檔案格式。CSV 是一種常見的數據交換格式,因為它簡單、緊湊,且適用於許多平台。在 CSV 檔案中,數據由逗號分隔,每一行表示一個新的行,且欄位標題通常在第一行。
DataTable 是 ADO.NET 庫的一部分,用於代表存儲在內存中的單個表格數據。它包括行和列,每個列可以是不同的數據類型。DataTable 非常靈活,可以以結構化的格式表示數據,使其非常適合處理 CSV 文件數據。
開啟Visual Studio。
選擇 檔案 > 新增 > 專案。
IronXL 是一個強大的程式庫,能夠讓你 處理Excel 在C#中使用和CSV文件。要使用它,您需要通過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列的內容。這有助於驗證數據是否正確導入到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 開始。