使用IRONXL

如何在C#中将CSV导入到Datatable

发布 2024年一月27日
分享:

简介

欢迎阅读导入 CSV 的初级教程 (逗号分隔值) 文件到一个 数据表 在 C# 中使用 IronXL. 本指南将为您提供一个易于遵循的方法,确保即使您是 C# 的新手,也能找到这个过程的简单方法。我们将涵盖每一个步骤,从设置环境到编写源代码。通过本教程结束时,您将清楚地了解如何在 C# 中使用 var 阅读器和连接字符串,将 CSV 数据转换为 Datatable,管理 Datatable 列,并处理 CSV 文档的各种方面。

先决条件

在我们开始之前,请确保您已具备以下条件

  • C# 的基础知识
  • 本地计算机上安装了 Visual Studio

  • 可通过 NuGet 软件包管理器获取 IronXL 库

了解基础知识

什么是 CSV 文件?

CSV 文件 (逗号分隔值文件) 是一种纯文本文件,使用特定的结构来排列表格数据。CSV 简单、紧凑,可用于多种平台,因此是一种常用的数据交换格式。在 CSV 文件中,数据用逗号分隔,每一行代表一行新数据,列标题通常出现在第一行,即 int i。

了解 C&num 中的数据表;

数据表是 C# 中 ADO.NET 库的一部分,代表一个内存数据表。它由行和列组成,每一列可以是不同的数据类型。DataTable 非常灵活,能以结构化格式表示数据,因此非常适合处理 CSV 文件数据。

设置项目

第 1 步:创建新的 C#项目

1.打开 Visual Studio。

2.选择 File > New > Project

3.选择一个 C# 控制台或 Windows 窗体应用程序,并给它取一个合适的名字。

第 2 步:安装 IronXL

IronXL 是一个功能强大的库,可让你 使用 Excel 和 CSV 文件。要使用它,需要通过 NuGet 包管理器进行安装。在 Visual Studio:

1.转到 工具 > NuGet软件包管理器 > 管理解决方案的 NuGet 软件包

2.搜索 IronXL.Excel.

![如何在 C# 中导入 CSV 到 Datatable:图 1 - IronXL](/static-assets/excel/blog/csharp-import-csv-to-datatable-tutorial/csharp-import-csv-to-datatable-tutorial-1.webp)

3.将软件包安装到项目中。

使用 IronXL 将 CSV 文件读入数据表

步骤 1:设置环境

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

这些使用语句包括我们任务所需的命名空间。

第 2 步:创建导入 CSV 的方法

定义一个类,CsvToDataTable,其中包含一个静态方法 ImportCsvToDataTable。该方法将负责把 CSV 文件转换成数据表

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 数据转换为数据表。这一步是主要步骤,因为它将数据转换成一种可以在 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 数据转换为数据表DefaultWorkSheet 从工作簿中获取第一个工作表,相当于 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 方法。用 CSV 文件的实际文件路径替换 "csvfile.csv "

第 6 步:使用输出数据表

获得 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 来有效管理内存使用情况。

结论

使用 C# 中的 IronXL 将 CSV 数据导入 DataTable 非常简单。它增强了应用程序的数据操作能力,使您可以高效地处理 CSV 文件。通过本教程中概述的步骤,初学者可以轻松地将此功能集成到他们的 C# 项目中。

IronXL 提供免费试用版,供用户探索其功能。对于那些寻求更高级功能和支持的用户,许可选项从"$liteLicense "开始。

< 前一页
如何在VB .NET中将Excel文件导入SQL数据库
下一步 >
如何在C#中将CSV文件转换为列表

准备开始了吗? 版本: 2024.9 刚刚发布

免费NuGet下载 总下载量: 988,189 查看许可证 >