与其他组件比较 EPPlus 读取 Excel 到 DataTable C#(IronXL 教程) Curtis Chau 已更新:八月 4, 2025 下载 IronXL NuGet 下载 DLL 下载 免费试用 法学硕士副本 法学硕士副本 将页面复制为 Markdown 格式,用于 LLMs 在 ChatGPT 中打开 向 ChatGPT 咨询此页面 在双子座打开 向 Gemini 询问此页面 在双子座打开 向 Gemini 询问此页面 打开困惑 向 Perplexity 询问有关此页面的信息 分享 在 Facebook 上分享 分享到 X(Twitter) 在 LinkedIn 上分享 复制链接 电子邮件文章 想找一个能将 Excel 数据读取到 C# 中的DataTable的 Excel 库吗? 在 C# 中将 Excel 文件读取到DataTable中,在各个行业和领域都有多种实际应用,例如数据分析和报告、将数据导入数据库、数据迁移、数据验证和清理、与其他系统集成、自动化和批量处理。 在本文中,我们将讨论和比较两个不同的适用于 .NET Core 的 C# 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 框架中 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; } } 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 $vbLabelText $csharpLabel 上述代码定义了一个方法,该方法接受文件路径和工作表名称等输入参数,并返回一个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(); } } } 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 $vbLabelText $csharpLabel 在上面的代码示例中,我们只是加载 Excel 文件并使用workSheet.ToDataTable(true)方法将其转换为DataTable 。 6.1 输出 输出结果将为打印到控制台的 Excel 文件内容。 7. 结论 总之,在 C# 中读取 Excel 文件并将其转换为DataTable时,EPPlus 和 IronXL 都是优秀的库,它们提供了强大的功能并简化了过程。 EPPlus是一个开源库,它提供了一个简单的 API,用于以编程方式生成、读取和修改 Excel 电子表格。 它支持 .xls 和 .xlsx 格式,并提供高效的性能和内存管理。 另一方面, IronXL是一个功能强大的库,使开发人员能够在 .NET 应用程序中轻松处理 Excel 文件。 它提供直观的 API 和全面的功能,用于提取数据、执行计算、创建图表和生成报告。 IronXL 简化了复杂的 Excel 文件处理任务,例如数据导入/导出、数据分析和动态模板创建。 通过比较 IronXL 和 EPPlus 的代码示例,我们发现 EPPlus 代码相当冗长、复杂且难以阅读。 另一方面,IronXL 代码非常简单易读。 IronXL 使用默认工作表,但在 EPPlus 中,您需要指定工作表的名称; 否则,你会收到错误提示。 总而言之,对于操作 Excel 文件和将 Excel 文件读取为DataTable ,我推荐使用 IronXL 而不是 EPPlus。 此外,IronXL 在用简单代码处理 Excel 文件方面提供了比 EPPlus 多得多的功能。 有关 IronXL 的更多教程,请访问以下链接。 请注意EPPlus 是其各自所有者的注册商标。 本网站与EPPlus没有任何关联,也未获得EPPlus的认可或赞助。 所有产品名称、徽标和品牌均为各自所有者的财产。 比较仅供参考,反映的是撰写时的公开信息。 常见问题解答 如何在 C# 中将 Excel 数据读取到 DataTable? 您可以使用 IronXL 通过加载 Excel 工作簿 WorkBook.Load()、访问工作表并使用 ToDataTable() 转换数据来将 Excel 数据读取到 DataTable 中。 使用 IronXL 进行 Excel 操作的优势是什么? IronXL 提供了一个简单直观的 API,简化了 Excel 文件操作。它包括数据提取、计算、图表创建和报告生成等功能,成为开发人员的综合解决方案。 IronXL 是否支持 .xls 和 .xlsx 文件格式? 是的,IronXL 支持 .xls 和 .xlsx 文件格式,允许操作不同类型的 Excel 文件。 我可以在没有安装 Microsoft Office 的情况下使用 IronXL 吗? 是的,IronXL 可以在不需要安装 Microsoft Office 或 Excel 的情况下用于操作 Excel 文件。 如何在 .NET 项目中安装 IronXL? 要安装 IronXL,请在 .NET 项目中打开 NuGet 包管理器,搜索 'IronXL' 并安装该包。这将把 IronXL 添加到您的项目中,并允许您开始使用其功能。 将 Excel 文件读取到 DataTable 时有哪些常见问题以及如何排查它们? 常见问题包括文件路径不正确、不支持的格式或格式错误的数据。确保文件路径正确、格式受支持且数据清晰。IronXL 提供明确的错误消息以帮助排查这些问题。 IronXL 与 EPPlus 在将 Excel 文件读取到 DataTable 中的比较如何? IronXL 以其易用性和全面的功能著称,而 EPPlus 也很有效,但实现起来可能更复杂。IronXL 为开发人员提供了更加简洁的 API。 IronXL 适合大型 Excel 文件吗? 是的,IronXL 旨在高效处理大型 Excel 文件,提供优化文件操作性能和内存使用的功能。 IronXL 可以用于数据分析和报告吗? 绝对可以,IronXL 非常适合数据分析和报告,提供强大的数据提取和操作、图表创建和报告生成功能。 对开发人员有利的 IronXL 的关键功能是什么? IronXL 的关键功能包括无缝的数据提取、强大的计算能力、轻松的图表创建、高效的报告生成以及对 Excel 文件格式的广泛支持。 Curtis Chau 立即与工程团队聊天 技术作家 Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。除了开发之外,Curtis 对物联网 (IoT) 有浓厚的兴趣,探索将硬件和软件集成的新方法。在空闲时间,他喜欢玩游戏和构建 Discord 机器人,将他对技术的热爱与创造力相结合。 相关文章 已发布十二月 18, 2025 使用互操作比较在 C# 中创建 Excel 文件:IronXL 和替代库 发现对创建电子表格 Excel Interop 的最佳替代方案。比较顶级 Excel 库的功能、授权和代码示例。 阅读更多 已更新六月 22, 2025 C# 开发人员使用 IronXL 的 Zip 存档教程 在本教程中,我们将探讨如何在C#中创建ZIP文件、从压缩文件中提取数据以及操作ZIP档案,使用相对路径。 阅读更多 已更新七月 28, 2025 比较三个开源 C# Excel 库 本文将探讨三个 C# 开源 Excel 库,旨在简化 .NET 环境中的 Excel 文件操作 阅读更多 C# 开发人员使用 IronXL 的 Zip 存档教程IronXL 和 FastExcel 的比较 - .NET
已发布十二月 18, 2025 使用互操作比较在 C# 中创建 Excel 文件:IronXL 和替代库 发现对创建电子表格 Excel Interop 的最佳替代方案。比较顶级 Excel 库的功能、授权和代码示例。 阅读更多