与其他组件比较

IronXL与NPOI的比较

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

众所周知,Excel 可能是世界上最常用的电子表格应用程序。 用户既包括开发人员,也包括普通大众,但开发人员可能更容易接受这篇文章。 最初,开发人员在各种应用程序中使用 Excel 的选择并不多。 但是,有 VBA(Visual Basic 应用程序)您可以根据自己的需要使用 Office 套件中内置的任何 Office 产品。

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

在本文中,我将比较两个非常好的 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 项目由 Apache 提供。 它是免费和开源的。 此外,翻译不需要 Interop,也就是说,用户不需要安装 Excel 就可以使用开发人员的应用程序。

IronXL 和 Excel

IronXL.Excel 是 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 阅读 Excel 文件

以下代码演示了如何使用 IronXL.Excel 读取 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 一样功能强大,但却更加直观。 当然,有了 License 密钥,您就可以享受付费软件最重要的优势:您可以获得我们的专业支持、持续可靠的更新计划,以及向 Iron Software 支持代理申请功能的能力,他们很乐意为您提供帮助。 这是开源无法提供的。

下载

本项目可在 GitHub 上查阅: IronXL vs NPOI 示例

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

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

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