
EPPlus 读取 Excel 到 DataTable C#(IronXL 教程)
在C#中寻找一个Excel库,将Excel数据读取到DataTable中?
在C#中将Excel文件读取到DataTable中在各个行业和领域有多个实际应用,例如数据分析和报告、导入数据到数据库、数据迁移、数据验证和清理、与其他系统集成、自动化和批处理。
在本文中,我们将讨论和比较两个针对.NET Core的不同Excel库,这些库提供了将Excel数据和Excel文件读取到DataTable中这一功能。 库包括
- EPPlus
- IronXL
1. EPPlus库
EPPlus是一个功能强大的开源库,用于在 C# 中创建和操作 Excel 文件。 它提供了一个简单直观的 API,允许开发人员以编程方式生成、读取和修改 Excel 电子表格,而无需在服务器或客户端计算机上安装 Microsoft Office 或 Excel。 使用 EPPlus,您可以轻松创建工作表、添加数据、应用格式、创建图表以及对 Excel 文件执行其他操作。 它同时支持较旧的 .xls 格式和较新的 .xlsx 格式,并提供高效的性能和内存管理。 无论您需要生成动态报告、导入/导出数据,还是自动化 Excel 相关任务,EPPlus 都提供了一套全面的功能和特性,以简化您在 C# 应用程序中对 Excel 文件的处理。
2. IronXL
IronXL是一个功能强大且用途广泛的库,它使开发人员能够在 .NET 应用程序中轻松读取、写入和操作 Excel 文件。 IronXL 凭借其直观且全面的 API,简化了原本复杂的电子表格操作流程,使开发人员能够轻松地无缝提取数据、执行计算、创建图表和生成报告。 无论是自动化数据导入/导出任务、执行数据分析,还是创建动态 Excel 模板,IronXL 都能提供强大的解决方案,为开发人员节省宝贵的时间和精力,同时确保处理 Excel 数据的准确性和可靠性。 IronXL 凭借其无缝集成、丰富的文档和广泛的功能,成为开发人员寻求可靠高效的工具来克服 .NET Framework中 Excel 文件操作相关挑战的首选。
3. 安装 EPPlus 库
要将 EPPlus 库安装到您的 C# 项目中,首先需要在 Visual Studio 中创建一个新的基于控制台的项目。 之后,您可以使用 NuGet 包管理器轻松安装它。
创建新项目后,转到"工具",将鼠标悬停在 NuGet 程序包管理器上,然后选择"管理解决方案的 NuGet 程序包"。
将出现一个新窗口。 在这个新窗口中,转到"浏览"选项并搜索"EPPlus"。 将会显示软件包列表,您应该选择最新的稳定版本。 然后,点击右侧的"安装"按钮来安装 EPPlus 库。
就这样,EPPlus 将被添加到您的项目中。
4. 安装 IronXL
安装 IronXL 的方法有很多,但在本节中,我们将只讨论使用 NuGet 包管理器安装 IronXL。
就像第 3 部分一样,创建一个新项目,然后转到"工具",打开解决方案的 NuGet 包管理器。
在新窗口中,于搜索栏中输入关键词"IronXL"。 将会出现一个列表,您可以选择要安装的 IronXL 软件包。 然后,点击"安装"按钮,将 IronXL 安装到您的项目中。
IronXL现在可以使用了。
5. 使用 EPPlus 库读取 Excel 文件并将数据导入 DataTable
在本节中,我们将使用C# EPPlus包Excel库来检查将Excel读取为DataTable的代码。
我们需要一个示例Excel文件作为DataTable来读取。 为此,我们将生成一个示例 Excel 文件。
下面是将Excel文件读取为DataTable的代码。
using OfficeOpenXml;
using System;
using System.Data;
using System.IO;
class Program
{
static void Main(string[] args)
{
var path = @"sample.xlsx"; // Specify the path to your Excel file
var data = ExcelDataToDataTable(path, "Table");
// Iterate through each row in the DataTable and print its contents
foreach (DataRow row in data.Rows)
{
foreach (var wsrow in row.ItemArray)
{
Console.Write(wsrow + " ");
}
Console.WriteLine();
}
}
/// <summary>
/// Converts Excel sheet data to a DataTable.
/// </summary>
/// <param name="filePath">The path to the Excel file.</param>
/// <param name="sheetName">The name of the worksheet to read from.</param>
/// <param name="hasHeader">Indicates whether the Excel sheet has a header row.</param>
/// <returns>DataTable containing Excel data.</returns>
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 exist.");
// Set the license context for EPPlus
ExcelPackage.LicenseContext = LicenseContext.NonCommercial;
// Load the Excel file into an EPPlus ExcelPackage
using (var xlPackage = new ExcelPackage(fi))
{
// Get the specified worksheet from the workbook
var worksheet = xlPackage.Workbook.Worksheets[sheetName];
// Convert the worksheet to a DataTable, optionally using the first row as column names
dt = worksheet.Cells[1, 1, worksheet.Dimension.End.Row, worksheet.Dimension.End.Column].ToDataTable(c =>
{
c.FirstRowIsColumnNames = hasHeader;
});
}
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" ' Specify the path to your Excel file
Dim data = ExcelDataToDataTable(path, "Table")
' Iterate through each row in the DataTable and print its contents
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
''' <summary>
''' Converts Excel sheet data to a DataTable.
''' </summary>
''' <param name="filePath">The path to the Excel file.</param>
''' <param name="sheetName">The name of the worksheet to read from.</param>
''' <param name="hasHeader">Indicates whether the Excel sheet has a header row.</param>
''' <returns>DataTable containing Excel data.</returns>
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 exist.")
End If
' Set the license context for EPPlus
ExcelPackage.LicenseContext = LicenseContext.NonCommercial
' Load the Excel file into an EPPlus ExcelPackage
Using xlPackage = New ExcelPackage(fi)
' Get the specified worksheet from the workbook
Dim worksheet = xlPackage.Workbook.Worksheets(sheetName)
' Convert the worksheet to a DataTable, optionally using the first row as column names
dt = worksheet.Cells(1, 1, worksheet.Dimension.End.Row, worksheet.Dimension.End.Column).ToDataTable(Sub(c)
c.FirstRowIsColumnNames = hasHeader
End Sub)
End Using
Return dt
End Function
End Class上述代码定义了一个方法,该方法接受如文件路径和表单名称等输入参数,并返回一个DataTable作为输出。 它还遍历了DataTable的每一行,并打印数据。
5.1. 输出
输出结果将为打印到控制台的 Excel 文件内容。
6. 使用 IronXL 将 Excel 文件读取为数据表
使用IronXL转换Excel表并将其读取为DataTable非常简单,只需几行代码。 此外,我们将使用之前的 Excel 文件作为输入。
以下代码示例与上述代码的功能相同,但使用的是 IronXL。
using IronXL;
using System;
using System.Data;
class Program
{
static void Main(string[] args)
{
// Load the Excel file into an IronXL WorkBook
WorkBook workBook = WorkBook.Load("sample.xlsx");
// Get the default worksheet from the workbook
WorkSheet workSheet = workBook.DefaultWorkSheet;
// Convert the worksheet to a DataTable, specifying that the first row contains column names
DataTable table = workSheet.ToDataTable(true);
// Iterate through each row in the DataTable and print its contents
foreach (DataRow row in table.Rows)
{
foreach (var cell in row.ItemArray)
{
Console.Write(cell + " ");
}
Console.WriteLine();
}
}
}Imports IronXL
Imports System
Imports System.Data
Friend Class Program
Shared Sub Main(ByVal args() As String)
' Load the Excel file into an IronXL WorkBook
Dim workBook As WorkBook = WorkBook.Load("sample.xlsx")
' Get the default worksheet from the workbook
Dim workSheet As WorkSheet = workBook.DefaultWorkSheet
' Convert the worksheet to a DataTable, specifying that the first row contains column names
Dim table As DataTable = workSheet.ToDataTable(True)
' Iterate through each row in the DataTable and print its contents
For Each row As DataRow In table.Rows
For Each cell In row.ItemArray
Console.Write(cell & " ")
Next cell
Console.WriteLine()
Next row
End Sub
End Class在上面的代码示例中,我们只是加载Excel文件并使用DataTable。
6.1 输出
输出结果将为打印到控制台的 Excel 文件内容。
7. 结论
总之,在读取Excel文件并将其转换为C#中的DataTable时,EPPlus和IronXL都是优秀的库,提供强大的功能并简化了流程。
EPPlus是一个开源库,它提供了一个简单的 API,用于以编程方式生成、读取和修改 Excel 电子表格。 它支持 .xls 和 .xlsx 格式,并提供高效的性能和内存管理。
另一方面, IronXL是一个功能强大的库,使开发人员能够在 .NET 应用程序中轻松处理 Excel 文件。 它提供直观的 API 和全面的功能,用于提取数据、执行计算、创建图表和生成报告。 IronXL 简化了复杂的 Excel 文件处理任务,例如数据导入/导出、数据分析和动态模板创建。
通过比较 IronXL 和 EPPlus 的代码示例,我们发现 EPPlus 代码相当冗长、复杂且难以阅读。 另一方面,IronXL 代码非常简单易读。 IronXL 使用默认工作表,但在 EPPlus 中,您需要指定工作表的名称; 否则,你会收到错误提示。
总而言之,我会推荐IronXL而不是EPPlus来操作和读取Excel文件为DataTable。 此外,IronXL 在用简单代码处理 Excel 文件方面提供了比 EPPlus 多得多的功能。 有关 IronXL 的更多教程,请访问以下链接。

Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。
相关文章



