与其他组件比较 IronXL 和 NPOI 的比较 Curtis Chau 已更新:七月 28, 2025 下载 IronXL NuGet 下载 DLL 下载 免费试用 法学硕士副本 法学硕士副本 将页面复制为 Markdown 格式,用于 LLMs 在 ChatGPT 中打开 向 ChatGPT 咨询此页面 在双子座打开 向 Gemini 询问此页面 在双子座打开 向 Gemini 询问此页面 打开困惑 向 Perplexity 询问有关此页面的信息 分享 在 Facebook 上分享 分享到 X(Twitter) 在 LinkedIn 上分享 复制链接 电子邮件文章 您可能知道,Excel 可能是世界上使用最广泛的电子表格应用程序。 用户包括开发者和普通大众,但开发者可能会对这篇文章更感兴趣。 最初,开发人员在各种应用程序中使用 Excel 的选择并不多。 但是,Office 套件中内置了 VBA(Visual Basic for Applications),您可以根据需要使用 VBA 来操作任何 Office 产品。 开发人员使用 Excel 中的 VBA 来自定义他们与 Excel 及其数据的交互,甚至是其可视化功能。 但最终,这还不够。 开发人员想要更多功能,因此他们开始使用 Office.Interop。 在本文中,我将比较两个非常优秀的 Excel 库,它们无需依赖 Office.Interop 即可与 Excel 配合使用。 它们是: IronXL NPOI 您将看到并了解每个 Excel 库的功能,然后通过代码示例和分步教程对两者进行比较。 虽然本文无法涵盖这两个 Excel 库的所有功能,但会解释它们各自最常见和最流行的用途。 如何在 C# 中使用 Excel 的 NPOI 安装 C# 库以使用 NPOI 读取 Excel 文件 实例化XSSFWorkbook对象以存储 Excel 文件 使用GetSheetAt方法获取指定的工作表 通过向GetRow方法传递行索引来访问每一行。 使用GetCell方法访问行中的每个单元格 什么是NPOI? NPOI is the .NET version of the POI Java project at http://poi.apache.org/. POI 是一个开源项目,可以帮助您读取/写入 xls、doc、ppt 文件。 它有着广泛的应用。 例如,你可以用它来: 无需在服务器上安装 Microsoft Office 套件即可生成 Excel 报表,比在后台调用 Microsoft Excel ActiveX 更高效。 从 Office 文档中提取文本,以帮助您实现全文索引功能(此功能通常用于创建搜索引擎)。 从 Office 文档中提取图像 生成包含公式的 Excel 表格。 NPOI 和 Excel NPOI is a C# port of the POI Java project by Apache. 它是免费且开源的。 此外,它不需要互操作性,这意味着用户无需安装 Excel 即可使用该开发者的应用程序。 IronXL 和 Excel IronXL 是一个适用于 VB 和 C# 的 Excel API。 使用 IronXL,您可以在 .NET 中读取、编辑和创建 Excel 电子表格文件。 NPOI 和 IronXL Excel 库的通用库功能 NPOI IronXL 单元格范围 单元格范围 单元格样式(边框、颜色、填充、字体、数字、对齐方式) 单元格视觉样式:字体、大小、背景图案、边框、对齐方式和数字格式。 公式计算 公式 数据验证 数据验证 条件格式 条件格式 图像 图像 图表 图表 表 1 - 功能对比 IronXL 和 NPOI 的安装 你可以通过手动下载、通过 NuGet 或使用 Visual Studio 中的 NuGet 包管理器来安装这两个库。 以下是简要概述。 NPOI 安装 使用 NuGet 安装 NPOI 要通过 NuGet 安装 NPOI,请打开 Visual Studio 开发人员命令提示符并输入以下命令: Install-Package NPOI -Version x.x.x 图 1 - NuGet NPOI 安装 Visual Studio NuGet 包管理器和 NPOI 请按照以下步骤通过 Visual Studio 中的 NuGet 包管理器安装 IronXL 或 NPOI: 在解决方案资源管理器中右键单击项目 选择"管理 NuGet 程序包" 浏览您的套餐 点击安装 图 2 - NPOI 的 NuGet 包管理器 IronXL 安装 下载 IronXL To download IronXL, navigate to the following URL and click the "Download" button. 图 3 - 下载 IronXL 使用 NuGet 安装 IronXL 要通过NuGet安装IronXL,请打开Visual Studio开发者命令提示符并输入以下内容: Install-Package IronXL.Excel -Version x.x.x 图 4 - NuGet IronXL 安装 Visual Studio NuGet 包管理器和 IronXL 请按照以下步骤通过 Visual Studio 中的 NuGet 包管理器安装 IronXL: 在解决方案资源管理器中右键单击项目 选择"管理 NuGet 程序包" 浏览您的套餐 点击安装 图 5 - IronXL 的 NuGet 包管理器 使用 NPOI 和 IronXL 读取和写入 Excel 文件 使用 NPOI 读取 Excel 文件 以下代码演示了如何使用 NPOI 读取 Excel 文件并显示其内容。 添加以下代码并包含必要的命名空间: using NPOI.SS.UserModel; using NPOI.XSSF.UserModel; using System.Data; using System.IO; using System.Collections.Generic; using NPOI.SS.UserModel; using NPOI.XSSF.UserModel; using System.Data; using System.IO; using System.Collections.Generic; Imports NPOI.SS.UserModel Imports NPOI.XSSF.UserModel Imports System.Data Imports System.IO Imports System.Collections.Generic $vbLabelText $csharpLabel 以下代码读取一个现有的 Excel 文件,并将其显示在数据网格视图中。 public void ReadExcelNPOI() { DataTable dtTable = new DataTable(); List<string> lstRows = new List<string>(); ISheet objWorksheet; string strPath = @"c:\temp\NPOI_Test.XLSX"; // Use FileStream to open the Excel file using (var fStream = new FileStream(strPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) { fStream.Position = 0; XSSFWorkbook objWorkbook = new XSSFWorkbook(fStream); objWorksheet = objWorkbook.GetSheetAt(0); IRow objHeader = objWorksheet.GetRow(0); int countCells = objHeader.LastCellNum; // Add columns to the DataTable based on the header row of Excel for (int j = 0; j < countCells; j++) { ICell objCell = objHeader.GetCell(j); if (objCell == null || string.IsNullOrWhiteSpace(objCell.ToString())) continue; { dtTable.Columns.Add(objCell.ToString()); } } // Add rows to the DataTable, looping through each row and cell for (int i = (objWorksheet.FirstRowNum + 1); i <= objWorksheet.LastRowNum; i++) { IRow objRow = objWorksheet.GetRow(i); if (objRow == null || objRow.Cells.All(d => d.CellType == CellType.Blank)) continue; for (int j = objRow.FirstCellNum; j < countCells; j++) { ICell cell = objRow.GetCell(j); if (cell != null && !string.IsNullOrEmpty(cell.ToString()) && !string.IsNullOrWhiteSpace(cell.ToString())) { lstRows.Add(cell.ToString()); } } if (lstRows.Count > 0) dtTable.Rows.Add(lstRows.ToArray()); lstRows.Clear(); } } // Assuming dataGridView1 is a DataGridView control on a Form dataGridView1.DataSource = dtTable; } private void button1_Click(object sender, EventArgs e) { ReadExcelNPOI(); } public void ReadExcelNPOI() { DataTable dtTable = new DataTable(); List<string> lstRows = new List<string>(); ISheet objWorksheet; string strPath = @"c:\temp\NPOI_Test.XLSX"; // Use FileStream to open the Excel file using (var fStream = new FileStream(strPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) { fStream.Position = 0; XSSFWorkbook objWorkbook = new XSSFWorkbook(fStream); objWorksheet = objWorkbook.GetSheetAt(0); IRow objHeader = objWorksheet.GetRow(0); int countCells = objHeader.LastCellNum; // Add columns to the DataTable based on the header row of Excel for (int j = 0; j < countCells; j++) { ICell objCell = objHeader.GetCell(j); if (objCell == null || string.IsNullOrWhiteSpace(objCell.ToString())) continue; { dtTable.Columns.Add(objCell.ToString()); } } // Add rows to the DataTable, looping through each row and cell for (int i = (objWorksheet.FirstRowNum + 1); i <= objWorksheet.LastRowNum; i++) { IRow objRow = objWorksheet.GetRow(i); if (objRow == null || objRow.Cells.All(d => d.CellType == CellType.Blank)) continue; for (int j = objRow.FirstCellNum; j < countCells; j++) { ICell cell = objRow.GetCell(j); if (cell != null && !string.IsNullOrEmpty(cell.ToString()) && !string.IsNullOrWhiteSpace(cell.ToString())) { lstRows.Add(cell.ToString()); } } if (lstRows.Count > 0) dtTable.Rows.Add(lstRows.ToArray()); lstRows.Clear(); } } // Assuming dataGridView1 is a DataGridView control on a Form dataGridView1.DataSource = dtTable; } private void button1_Click(object sender, EventArgs e) { ReadExcelNPOI(); } Public Sub ReadExcelNPOI() Dim dtTable As New DataTable() Dim lstRows As New List(Of String)() Dim objWorksheet As ISheet Dim strPath As String = "c:\temp\NPOI_Test.XLSX" ' Use FileStream to open the Excel file Using fStream = New FileStream(strPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite) fStream.Position = 0 Dim objWorkbook As New XSSFWorkbook(fStream) objWorksheet = objWorkbook.GetSheetAt(0) Dim objHeader As IRow = objWorksheet.GetRow(0) Dim countCells As Integer = objHeader.LastCellNum ' Add columns to the DataTable based on the header row of Excel For j As Integer = 0 To countCells - 1 Dim objCell As ICell = objHeader.GetCell(j) If objCell Is Nothing OrElse String.IsNullOrWhiteSpace(DirectCast(objCell, Object).ToString()) Then Continue For End If If True Then dtTable.Columns.Add(DirectCast(objCell, Object).ToString()) End If Next j ' Add rows to the DataTable, looping through each row and cell For i As Integer = (objWorksheet.FirstRowNum + 1) To objWorksheet.LastRowNum Dim objRow As IRow = objWorksheet.GetRow(i) If objRow Is Nothing OrElse objRow.Cells.All(Function(d) d.CellType = CellType.Blank) Then Continue For End If For j As Integer = objRow.FirstCellNum To countCells - 1 Dim cell As ICell = objRow.GetCell(j) If cell IsNot Nothing AndAlso Not String.IsNullOrEmpty(DirectCast(cell, Object).ToString()) AndAlso Not String.IsNullOrWhiteSpace(DirectCast(cell, Object).ToString()) Then lstRows.Add(DirectCast(cell, Object).ToString()) End If Next j If lstRows.Count > 0 Then dtTable.Rows.Add(lstRows.ToArray()) End If lstRows.Clear() Next i End Using ' Assuming dataGridView1 is a DataGridView control on a Form dataGridView1.DataSource = dtTable End Sub Private Sub button1_Click(ByVal sender As Object, ByVal e As EventArgs) ReadExcelNPOI() End Sub $vbLabelText $csharpLabel 使用 IronXL 读取 Excel 文件 以下代码演示了如何使用 IronXL 读取 Excel 文件并将其显示在数据网格视图中。 添加以下代码并包含命名空间: using IronXL; using System.Data; using IronXL; using System.Data; Imports IronXL Imports System.Data $vbLabelText $csharpLabel 请注意其中包含 IronXL。 这是 IronXL 正常运行的必要条件。 添加以下几行: private void button2_Click(object sender, EventArgs e) { // Load the Excel workbook string strPath = @"c:\temp\NPOI_Test.XLSX"; WorkBook workbook = WorkBook.Load(strPath); // Access the default worksheet WorkSheet sheet = workbook.DefaultWorkSheet; // Convert the worksheet to a DataTable var dtTable = sheet.ToDataTable(true); // Assuming dataGridView1 is a DataGridView control on a Form dataGridView1.DataSource = dtTable; } private void button2_Click(object sender, EventArgs e) { // Load the Excel workbook string strPath = @"c:\temp\NPOI_Test.XLSX"; WorkBook workbook = WorkBook.Load(strPath); // Access the default worksheet WorkSheet sheet = workbook.DefaultWorkSheet; // Convert the worksheet to a DataTable var dtTable = sheet.ToDataTable(true); // Assuming dataGridView1 is a DataGridView control on a Form dataGridView1.DataSource = dtTable; } Private Sub button2_Click(ByVal sender As Object, ByVal e As EventArgs) ' Load the Excel workbook Dim strPath As String = "c:\temp\NPOI_Test.XLSX" Dim workbook As WorkBook = WorkBook.Load(strPath) ' Access the default worksheet Dim sheet As WorkSheet = workbook.DefaultWorkSheet ' Convert the worksheet to a DataTable Dim dtTable = sheet.ToDataTable(True) ' Assuming dataGridView1 is a DataGridView control on a Form dataGridView1.DataSource = dtTable End Sub $vbLabelText $csharpLabel 如你所见,这一切加起来就大大减少了工作量。 结论 那么,为什么选择 IronXL? 如您所见,IronXL 拥有易于使用的 API,可保持您的代码简洁。 使用 IronXL 的库拥有简洁、易读的代码,这是一项值得的投资,因为它减少了理解代码功能所需的时间和精力,并且允许在不破坏现有功能的情况下对其进行更改。 IronXL 各方面都更加直观易用,同时功能也与 NPOI 一样强大。 当然,有了许可证密钥,您就可以享受付费软件最重要的优势:您可以获得我们的专业支持、持续可靠的更新计划,以及向 Iron Software 支持人员请求功能的能力,他们很乐意为您提供帮助。 这是开源软件无法提供的。 下载 该项目已在 GitHub 上开源: IronXL 与 NPOI 对比示例 请注意NPOI 是其各自所有者的注册商标。 本网站与NPOI没有任何关联,也未获得NPOI的认可或赞助。 所有产品名称、徽标和品牌均为各自所有者的财产。 比较仅供参考,反映的是撰写时的公开信息。 常见问题解答 使用 Office.Interop 进行 C# 中 Excel 操作的替代方案是什么? IronXL 是 C# 中 Excel 操作使用 Office.Interop 的替代方案。它提供了一个用户友好的 API,使开发人员可以创建、读取和编辑 Excel 文件,而无需安装 Microsoft Office。 如何在 C# 中将 Excel 文件转换为 PDF? 您可以通过在 C# 中使用 IronXL 加载 Excel 工作簿来将 Excel 文件转换为 PDF,然后使用 WorkBook.SaveAs 方法将文件保存为 PDF 格式。 使用 IronXL 进行 Excel 文件操作的主要好处是什么? IronXL 提供了更直观的 API,用于更轻松的代码维护、专业支持、定期更新,以及无需安装 Microsoft Office 即可处理 Excel 文件,这使其成为开发人员的强大选择。 可以通过 NuGet 安装 IronXL 吗? 是的,可以通过 NuGet 安装 IronXL。打开 Visual Studio 开发者命令提示符,输入 Install-Package IronXL.Excel -Version x.x.x。 使用 IronXL 可以执行哪些常见的 Excel 相关任务? 使用 IronXL,开发人员可以执行读取和写入 Excel 文件、样式化单元格、使用公式、验证数据、应用条件格式以及处理图像和图表等任务。 如何在没有 Microsoft Office 的情况下用 C# 读取 Excel 文件? 使用 IronXL,您可以通过 WorkBook.Load 加载工作簿来读取 C# 中的 Excel 文件,访问工作表,并使用直接的方法遍历行和单元格。 为什么选择 IronXL 而不是开源替代方案进行 Excel 操作? IronXL 提供了更用户友好的 API、专业支持、定期更新和持续的功能请求,这些优势比开源替代方案如 NPOI 更为明显。 NPOI 与 IronXL 在 Excel 文件操作上有什么不同? NPOI 是一个基于 Apache POI 项目的开源库,用于在没有 Microsoft Office 的情况下处理 Excel 文件。IronXL 通过提供更直观的 API、专业支持和定期更新,使其适合商业应用。 使用 IronXL 将 Excel 工作表转换为 DataTable 的过程是什么? 要使用IronXL将Excel工作表转换为DataTable,可以使用WorkBook.Load加载工作簿,访问所需的工作表,并使用可用的方法将其转换为DataTable以便进一步使用。 IronXL 如何在 .NET 应用程序中增强 Excel 文件管理? IronXL 通过提供干净直观的 API,方便执行读取、编辑和创建 Excel 文件的任务,在 .NET 应用程序中增强了 Excel 文件管理,而无需依赖于 Microsoft Office 的安装。 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 文件操作 阅读更多 IronXL 和 CsvHelper 的比较IronXL 和 Aspose Cells 的比较
已发布十二月 18, 2025 使用互操作比较在 C# 中创建 Excel 文件:IronXL 和替代库 发现对创建电子表格 Excel Interop 的最佳替代方案。比较顶级 Excel 库的功能、授权和代码示例。 阅读更多