与其他组件比较

EPPlus将Excel读取到DataTable的C# (IronXL教程)

发布 2023年五月16日
分享:

正在寻找一个 Excel 库,用于在 C# 中将 Excel 数据读入DataTable

用 C# 将 Excel 文件读取到 "DataTable "中,在各个行业和领域都有一些实际应用,例如数据分析和报告、将数据导入数据库、数据迁移、数据验证和清理、与其他系统集成、自动化和批处理。

在本文中,我们将讨论和比较两种不同的 Excel 库,它们都是 .NET Core 的 C# 库,提供了将 Excel 数据和 Excel 文件读取到 DataTable 中的这一功能。 这些库包括

1.EPPlus

2.IronXL

1.EPPlus 库

EPPlus是一个功能强大的开源库,用于用 C# 创建和操作 Excel 文件。 它提供了一个简单直观的 API,允许开发人员以编程方式生成、读取和修改 Excel 电子表格,而无需在服务器或客户端机器上安装 Microsoft Office 或 Excel。 使用 EPPlus,您可以轻松创建工作表、添加数据、应用格式化、创建图表并对 Excel 文件执行其他操作。 它同时支持较旧的 .xls 格式和较新的 .xlsx 格式,并提供高效的性能和内存管理。 无论您是需要生成动态报表、导入/导出数据,还是自动执行 Excel 相关任务,EPPlus 都能提供一套全面的特性和功能,简化您在 C# 应用程序中对 Excel 文件的处理。

2.IronXL

IronXLExcel 是一个功能强大、用途广泛的库,使开发人员能够在其 .NET 应用程序中毫不费力地读取、写入和处理 Excel 文件。 IronXL 凭借其直观而全面的 API,简化了原本复杂的电子表格工作流程,使开发人员能够无缝提取数据、执行计算、创建图表并轻松生成报告。 无论是自动执行数据导入/导出任务、执行数据分析,还是创建动态 Excel 模板,IronXL.Excel 都能提供强大的解决方案,为开发人员节省宝贵的时间和精力,同时确保处理 Excel 数据的准确性和可靠性。 IronXL for .NET 具有无缝集成、丰富的文档和广泛的功能,是开发人员寻求可靠高效工具的首选,以克服在 .NET Framework 中操作 Excel 文件所面临的挑战。

3.安装 EPPlus 库

要在 C# 项目中安装 EPPlus 库,首先需要在 Visual Studio 中创建一个新的基于控制台的项目。 之后,您可以使用 NuGet 软件包管理器轻松安装。

创建新项目后,转到 "工具",将鼠标悬停在 NuGet 包管理器上,然后选择 "管理解决方案的 NuGet 包"。

EPPlus 读取 Excel 到 DataTable C#(IronXL 教程) 图 1

一个新窗口将会出现。 在新窗口中,转到 "浏览 "选项并搜索 "EPPlus"。 将出现软件包列表,您应选择最新的稳定版本。 然后,点击右侧的 "安装 "按钮安装 EPPlus 库。

EPPlus 读取 Excel 到 DataTable C#(IronXL 教程) 图 2

就这样,EPPlus 将被添加到您的项目中。

4.安装 IronXL

安装 IronXL 的方法有很多,但在本节中,我们只讨论使用 NuGet 包管理器安装 IronXL。

就像在第 3 节中一样,创建一个新项目,然后转到 "工具",打开 NuGet 软件包管理器的解决方案。

在新窗口的搜索栏中输入关键词 "IronXL"。 这时会出现一个列表,您可以选择要安装的 IronXL 软件包。 然后,点击 "安装 "按钮将 IronXL 安装到您的项目中。

EPPlus 读取 Excel 到 DataTable C#(IronXL 教程) 图 3

现在,IronXL 已经可以使用了。

5.使用 EPPlus 库读取 Excel 文件和数据到 DataTable

在本节中,我们将研究使用 C# EPPlus 包 Excel 库将 Excel 作为 DataTable 读取的代码。

我们需要一个 Excel 样本文件,以便作为 "数据表 "读取。 为此,我们将生成一个 Excel 示例文件。

EPPlus 读取 Excel 到 DataTable C#(IronXL 教程) 图 4

以下是将 Excel 文件作为 "数据表 "读取的代码。


    using OfficeOpenXml;
    using System;
    using System.Data;
    using System.IO;

    class Program
    {
        static void Main(string [] args)
        {
            var path = @"sample.xlsx";
            var data = ExcelDataToDataTable(path, "Table");
            foreach (DataRow row in data.Rows)
            {
                foreach (var wsrow in row.ItemArray)
                {
                    Console.Write(wsrow);
                }
                Console.WriteLine();
            }

        }
        public static DataTable ExcelDataToDataTable(string filePath, string sheetName, bool hasHeader = true)
        {
            DataTable dt = new DataTable();
            var fi = new FileInfo(filePath);
            // Check if the file exists
            if (!fi.Exists)
                throw new Exception("File " + filePath + " Does Not Exists");

            ExcelPackage.LicenseContext = LicenseContext.NonCommercial;
            var xlPackage = new ExcelPackage(fi);
            // get the first worksheet in the workbook
            var worksheet = xlPackage.Workbook.Worksheets [sheetName];

            dt = worksheet.Cells [1, 1, worksheet.Dimension.End.Row, worksheet.Dimension.End.Column].ToDataTable(c =>
            {
                c.FirstRowIsColumnNames = true;
            });

            return dt;
        }
    }

    using OfficeOpenXml;
    using System;
    using System.Data;
    using System.IO;

    class Program
    {
        static void Main(string [] args)
        {
            var path = @"sample.xlsx";
            var data = ExcelDataToDataTable(path, "Table");
            foreach (DataRow row in data.Rows)
            {
                foreach (var wsrow in row.ItemArray)
                {
                    Console.Write(wsrow);
                }
                Console.WriteLine();
            }

        }
        public static DataTable ExcelDataToDataTable(string filePath, string sheetName, bool hasHeader = true)
        {
            DataTable dt = new DataTable();
            var fi = new FileInfo(filePath);
            // Check if the file exists
            if (!fi.Exists)
                throw new Exception("File " + filePath + " Does Not Exists");

            ExcelPackage.LicenseContext = LicenseContext.NonCommercial;
            var xlPackage = new ExcelPackage(fi);
            // get the first worksheet in the workbook
            var worksheet = xlPackage.Workbook.Worksheets [sheetName];

            dt = worksheet.Cells [1, 1, worksheet.Dimension.End.Row, worksheet.Dimension.End.Column].ToDataTable(c =>
            {
                c.FirstRowIsColumnNames = true;
            });

            return dt;
        }
    }
Imports OfficeOpenXml
	Imports System
	Imports System.Data
	Imports System.IO

	Friend Class Program
		Shared Sub Main(ByVal args() As String)
			Dim path = "sample.xlsx"
			Dim data = ExcelDataToDataTable(path, "Table")
			For Each row As DataRow In data.Rows
				For Each wsrow In row.ItemArray
					Console.Write(wsrow)
				Next wsrow
				Console.WriteLine()
			Next row

		End Sub
		Public Shared Function ExcelDataToDataTable(ByVal filePath As String, ByVal sheetName As String, Optional ByVal hasHeader As Boolean = True) As DataTable
			Dim dt As New DataTable()
			Dim fi = New FileInfo(filePath)
			' Check if the file exists
			If Not fi.Exists Then
				Throw New Exception("File " & filePath & " Does Not Exists")
			End If

			ExcelPackage.LicenseContext = LicenseContext.NonCommercial
			Dim xlPackage = New ExcelPackage(fi)
			' get the first worksheet in the workbook
			Dim worksheet = xlPackage.Workbook.Worksheets (sheetName)

			dt = worksheet.Cells (1, 1, worksheet.Dimension.End.Row, worksheet.Dimension.End.Column).ToDataTable(Sub(c)
				c.FirstRowIsColumnNames = True
			End Sub)

			Return dt
		End Function
	End Class
VB   C#

上述代码调用一个方法,该方法接收文件路径和工作表名称等输入参数,并返回一个 DataTable 作为输出。

5.1.输出

EPPlus 读取 Excel 到 DataTable C#(IronXL 教程) 图 5

6.使用 IronXL.Excel 将 Excel 文件作为数据表读取

使用 IronXL.Excel 转换 Excel 表并将其读取为 DataTable 非常简单,只需几行代码即可。 此外,我们还将使用之前的 Excel 文件作为输入。

以下代码示例执行与上述代码相同的功能,但使用的是 IronXL。


    using IronXL;
    using System;
    using System.Data;

    WorkBook workBook = WorkBook.Load("sample.xlsx");

    WorkSheet workSheet = workBook.DefaultWorkSheet;

    DataTable Table = workSheet.ToDataTable(true);

    foreach (DataRow row in Table.Rows)
    {
        for (int row = 0; row  < dataTable.Columns.Count; row ++)
        {
            Console.Write(row [row ] + " ");
        }
        Console.WriteLine();
    }

    using IronXL;
    using System;
    using System.Data;

    WorkBook workBook = WorkBook.Load("sample.xlsx");

    WorkSheet workSheet = workBook.DefaultWorkSheet;

    DataTable Table = workSheet.ToDataTable(true);

    foreach (DataRow row in Table.Rows)
    {
        for (int row = 0; row  < dataTable.Columns.Count; row ++)
        {
            Console.Write(row [row ] + " ");
        }
        Console.WriteLine();
    }
Imports IronXL
	Imports System
	Imports System.Data

	Private workBook As WorkBook = WorkBook.Load("sample.xlsx")

	Private workSheet As WorkSheet = workBook.DefaultWorkSheet

	Private Table As DataTable = workSheet.ToDataTable(True)

	For Each row As DataRow In Table.Rows
		For row As Integer = 0 To dataTable.Columns.Count - 1
			Console.Write(row (row) & " ")
		Next row
		Console.WriteLine()
	Next row
VB   C#

在上述代码示例中,我们只需加载 Excel 文件,然后使用 workSheet.ToDataTable 将其转换为 DataTable 即可。(真)方法。

6.1 输出

EPPlus 读取 Excel 到 DataTable C#(IronXL 教程) 图 6

7.结论

总之,在 C# 中读取 Excel 文件并将其转换为 DataTable 时,EPPlus 和 IronXL.Excel 都是优秀的库,它们提供了强大的功能并简化了过程。

EPPlusExcel 是一个开源库,它提供了一个直接的 API,用于以编程方式生成、读取和修改 Excel 电子表格。 它支持 .xls 和 .xlsx 格式,并提供高效的性能和内存管理。

另一方面,IronXLExcel 是一个多功能库,使开发人员能够在 .NET 应用程序中毫不费力地处理 Excel 文件。 它提供了直观的 API 和全面的功能,可用于提取数据、执行计算、创建图表和生成报告。 IronXL.Excel 简化了复杂的 Excel 文件操作任务,如数据导入/导出、数据分析和动态模板创建。

在比较 IronXL 和 EPPlus 的代码示例时,我们发现 EPPlus 的代码相当冗长、复杂且难以阅读。 另一方面,IronXL 代码相当简单易读。 IronXL 使用默认工作表,但在 EPPlus 中,您需要给出工作表的名称,否则会出错。

总之,相比 EPPlus,我更推荐 IronXL.Excel 来处理 Excel 文件和读取 Excel 文件中的 "数据表"。 另外,在用简单代码处理 Excel 文件方面,IronXL.Excel 提供了比 EPPlus 更多的功能。 有关 IronXL 的更多教程,请访问以下内容链接.

< 前一页
C# 开发人员使用 IronXL 的 Zip 归档教程
下一步 >
IronXL和FastExcel for .NET的比较

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

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