使用IRONXL

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

发布 2024年一月27日
分享:

介绍

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

先决条件

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

  • C# 基础知识
  • 在本地计算机上安装 Visual Studio
  • IronXL 库,可通过 NuGet 软件包管理器获取

了解基础知识

什么是 CSV 文件?

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

理解 C# 中的 DataTables;

DataTable 是 C# 中 ADO.NET 库的一部分,代表一个内存数据表。 它包括行和列,每列可以是不同的数据类型。 DataTables 具有高度灵活性,可以结构化格式表示数据,是处理 CSV 文件数据的理想工具。

设置项目

步骤 1:创建一个新的 C#; 项目

  1. 打开 Visual Studio。

  2. 选择文件 > > 项目

  3. 选择一个 C# 控制台或 Windows 窗体应用程序,并为其适当命名。

第 2 步:安装 IronXL

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

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

  2. 搜索IronXL.Excel

    如何在 C# 中导入 CSV 到 Datatable:图 1 - IronXL

  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 方法。 将 "csvfile.csv "替换为 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 提供免费试用版,供用户探索其功能。 对于寻求更高级功能和支持的用户,许可选项从 $749开始。

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

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

免费NuGet下载 总下载量: 1,111,773 查看许可证 >