与其他组件比较

IronXL与NPOI的比较

发布 2021年十二月1日
分享:

众所周知,Excel 可能是世界上使用最多的电子表格应用程序。用户既包括开发人员,也包括普通用户,但这篇文章可能会让开发人员更感兴趣。最初,开发人员在各种应用程序中使用 Excel 的选项并不多。不过,有 VBA (Visual Basic 应用程序) 您可以根据自己的需要操作任何 Office 产品。

开发人员使用 Excel 中的 VBA 来定制与 Excel 及其数据的交互,甚至是其可视化功能。但是,这最终还是不够。开发人员希望获得更多,于是他们开始使用 Office.Interop.NET 技术。

在本文中,我将比较两个非常好的 Excel 库,它们不依赖于 Office.Interop 来使用 Excel。它们是

  • IronXL
  • NPOI

您将看到并了解每个 Excel 库的功能,然后通过代码示例和分步教程对两者进行比较。虽然本文无法涵盖这两个 Excel 库的所有功能,但它将解释每个库最常见和最流行的用途。

什么是 NPOI?

NPOI 是 POI Java 项目的 .NET 版本。 http://poi.apache.org/.POI 是一个开源项目,可以帮助你读/写 xls、doc、ppt 文件。它的应用范围非常广泛。

例如,您可以用它来

  • 无需在服务器上安装 Microsoft Office 套件即可生成 Excel 报告,比在后台调用 Microsoft Excel ActiveX 更高效
  • 从 Office 文档中提取文本,帮助你实现全文索引功能 (大多数情况下,这一功能用于创建搜索引擎)
  • 从 Office 文档中提取图像
  • 生成包含公式的 Excel 表单

NPOI 和 Excel

NPOI 是 C# 移植的 POI Java 项目。它是免费开源的。此外,它不需要 Interop,这意味着用户不需要安装 Excel 就能让开发者的应用程序与之配合使用。

IronXL 和 Excel

IronXL 是一款适用于 VB 和 C# 的 Excel API。有了 IronXL,你就可以在 .NET 中读取、编辑和创建 Excel 电子表格文件。

NPOI 和 IronXL Excel 库的通用库功能

NPOIIronXL
单元格范围单元格范围
单元格样式(边框、颜色、填充、字体、编号、对齐方式)单元格可视化样式 字体、大小、背景图案、边框、对齐方式和数字格式。
公式计算公式
数据验证数据验证
条件格式化条件格式化
图片图片
图表图表

表 1 - 功能比较


安装 IronXL 和 NPOI

您可以通过手动下载、NuGet 或 Visual Studio 中的 NuGet 包管理器来安装这两个库。下面是简要介绍。

NPOI 安装

使用 NuGet 安装 NPOI

要通过 NuGet 安装 NPOI,请打开 Visual Studio developer 命令提示符并输入以下内容:

图形用户界面自动生成说明

图 1 - NuGet NPOI 安装

Visual Studio NuGet 包管理器和 NPOI

使用以下步骤通过 Visual Studio 中的 NuGet 包管理器安装 IronXL 或 NPOI:

  • 右键单击解决方案资源管理器中的项目
  • 选择 "管理 NuGet 包
  • 浏览软件包
  • 点击安装
电脑截图自动生成的描述

图 2 - NPOI 的 NuGet 包管理器

IronXL 安装

下载 IronXL

要下载 IronXL,请访问以下网址 网址 并点击 "下载 "按钮。

下载 IronXL

图 3 - 下载 IronXL

使用 NuGet 安装 IronXL

要通过 NuGet 安装 IronXL,请打开 Visual Studio 开发人员命令提示符并输入以下内容:

安装 NuGet IronXL

图 4 - 安装 NuGet IronXL

Visual Studio NuGet 包管理器和 IronXL

使用以下步骤通过 Visual Studio 中的 NuGet 包管理器安装 IronXL:

  • 右键单击解决方案资源管理器中的项目
  • 选择 "管理 NuGet 包
  • 浏览软件包
  • 点击安装
电脑截图自动生成的描述

图 5 - 用于 IronXL 的 NuGet 包管理器

使用 NPOI 和 IronXL 读取 Excel 文件并将其写入 Excel 文件

使用 NPOI 读取 Excel 文件

以下代码演示了如何使用 NPOI 读取 Excel 文件并显示其内容。 添加以下代码并包含必要的命名空间:

using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
Imports NPOI.SS.UserModel
Imports NPOI.XSSF.UserModel
VB   C#

以下代码读取现有 Excel 文件,并将其显示在数据网格视图中。

 public void ReadExcelNPOI()
        {
            DataTable dtTable = new DataTable();
            List<string> lstRows = new List<string>();
            ISheet objWorksheet;
            string strPath = @"c:\temp\NPOI_Test.XLSX";
            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;

                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());
                    }
                }
                for (int i = (objWorksheet.FirstRowNum + 1); i <= objWorksheet.LastRowNum; i++)
                {
                    IRow objRow = objWorksheet.GetRow(i);
                    if (objRow == null) continue;
                    if (objRow.Cells.All(d => d.CellType == CellType.Blank)) continue;
                    for (int j = objRow.FirstCellNum; j < countCells; j++)
                    {
                        if (objRow.GetCell(j) != null)
                        {
                            if (!string.IsNullOrEmpty(objRow.GetCell(j).ToString()) && !string.IsNullOrWhiteSpace(objRow.GetCell(j).ToString()))
                            {
                                lstRows.Add(objRow.GetCell(j).ToString());
                            }
                        }
                    }

                    if (lstRows.Count > 0)
                        dtTable.Rows.Add(lstRows.ToArray());
                    lstRows.Clear();
                }
            }
            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";
            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;

                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());
                    }
                }
                for (int i = (objWorksheet.FirstRowNum + 1); i <= objWorksheet.LastRowNum; i++)
                {
                    IRow objRow = objWorksheet.GetRow(i);
                    if (objRow == null) continue;
                    if (objRow.Cells.All(d => d.CellType == CellType.Blank)) continue;
                    for (int j = objRow.FirstCellNum; j < countCells; j++)
                    {
                        if (objRow.GetCell(j) != null)
                        {
                            if (!string.IsNullOrEmpty(objRow.GetCell(j).ToString()) && !string.IsNullOrWhiteSpace(objRow.GetCell(j).ToString()))
                            {
                                lstRows.Add(objRow.GetCell(j).ToString());
                            }
                        }
                    }

                    if (lstRows.Count > 0)
                        dtTable.Rows.Add(lstRows.ToArray());
                    lstRows.Clear();
                }
            }
            dataGridView1.DataSource = dtTable;
        }
        private void button1_Click(object sender, EventArgs e)
        {
            ReadExcelNPOI();
        }
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

使用 IronXL 读取 Excel 文件

以下代码演示了如何使用 IronXL 读取 Excel 文件并将其显示在数据网格视图中。添加以下代码并包含命名空间:

using IronXL;
using IronXL;
Imports IronXL
VB   C#

请注意其中包含了 IronXL。这是 IronXL 运行的必要条件。添加下面几行:

        private void button2_Click(object sender, EventArgs e)
        {
            string strPath = @"c:\temp\NPOI_Test.XLSX";
            WorkBook workbook = WorkBook.Load(strPath);
            WorkSheet sheet = workbook.DefaultWorkSheet;
            var dtTable = sheet.ToDataTable(true);
            dataGridView1.DataSource = dtTable;
        }
        private void button2_Click(object sender, EventArgs e)
        {
            string strPath = @"c:\temp\NPOI_Test.XLSX";
            WorkBook workbook = WorkBook.Load(strPath);
            WorkSheet sheet = workbook.DefaultWorkSheet;
            var dtTable = sheet.ToDataTable(true);
            dataGridView1.DataSource = dtTable;
        }
Private Sub button2_Click(ByVal sender As Object, ByVal e As EventArgs)
			Dim strPath As String = "c:\temp\NPOI_Test.XLSX"
			Dim workbook As WorkBook = WorkBook.Load(strPath)
			Dim sheet As WorkSheet = workbook.DefaultWorkSheet
			Dim dtTable = sheet.ToDataTable(True)
			dataGridView1.DataSource = dtTable
End Sub
VB   C#

正如您所看到的,这一切都会大大减少工作量。

结论

为什么选择 IronXL?正如您所看到的,IronXL 有一个易于使用的 API,可以保持代码的整洁。使用 IronXL 的库都拥有简洁、可读性强的代码,这样的投资可以减少理解代码所需的时间和精力,从而在不破坏代码的情况下更改代码。

IronXL 与 NPOI 一样功能强大,但却更加直观。当然,有了许可证密钥,您就可以获得付费软件最重要的优势:您可以获得我们的专业支持、持续可靠的更新计划,还可以向 Iron 软件支持代理申请功能,他们很乐意为您提供帮助。这是开源软件无法提供的。

下载

本项目可在 GitHub 上下载:

IronXL vs NPOI 示例

< 前一页
IronXL与CsvHelper的比较
下一步 >
IronXL 与 Aspose Cells 的对比

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

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