IronXL 和 NPOI 的比较
您可能知道,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;以下代码读取一个现有的 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();
}使用 IronXL 读取 Excel 文件
以下代码演示了如何使用 IronXL 读取 Excel 文件并将其显示在数据网格视图中。 添加以下代码并包含命名空间:
using IronXL;
using System.Data;using IronXL;
using System.Data;请注意其中包含 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;
}如你所见,这一切加起来就大大减少了工作量。
结论
那么,为什么选择 IronXL? 如您所见,IronXL 拥有易于使用的 API,可保持您的代码简洁。 使用 IronXL 的库拥有简洁、易读的代码,这是一项值得的投资,因为它减少了理解代码功能所需的时间和精力,并且允许在不破坏现有功能的情况下对其进行更改。
IronXL 各方面都更加直观易用,同时功能也与 NPOI 一样强大。 当然,有了许可证密钥,您就可以享受付费软件最重要的优势:您可以获得我们的专业支持、持续可靠的更新计划,以及向 Iron Software 支持人员请求功能的能力,他们很乐意为您提供帮助。 这是开源软件无法提供的。
下载
该项目已在 GitHub 上开源:
常见问题解答
使用 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 的安装。






