與其他組件比較

IronXL 與 NPOI 的比較

發佈 2021年12月1日
分享:

正如您所知,Excel 可能是世界上最常用的電子表格應用程式。用戶包括開發人員和一般民眾,但這篇文章可能更吸引開發人員。最初,開發人員在其各種應用程式中處理 Excel 的選擇並不多。然而,有 VBA (應用程式的視覺化基礎設計) 內建於 Office 套件中,您可以根據需要操作任何 Office 產品。

開發人員在 Excel 中使用 VBA 來自訂他們與 Excel 和其數據的互動,甚至是視覺能力。但最終這還不夠。開發人員需要更多,所以他們開始使用 Office.Interop。

在本文中,我將比較兩個非常好的 Excel 程式庫,它們不依賴於 Office.Interop 來處理 Excel。它們是:

  • IronXL
  • NPOI

您將會看到並學習每個 Excel 程式庫的功能,然後通過代碼範例和逐步教程來比較這兩者。儘管本文無法涵蓋這兩個 Excel 程式庫的所有功能,但會解釋每個程式庫中最常見和最受歡迎的用法。

NPOI是什麼?

NPOI是用於.NET的POI Java項目版本 http://poi.apache.org/. POI 是一個開源項目,可以幫助您讀取/寫入 xls、doc、ppt 檔案。它具有廣泛的應用。

例如,您可以使用它來:

  • 生成 Excel 報告,而無需在伺服器上安裝 Microsoft Office 套件,並且比在後台調用 Microsoft Excel ActiveX 更有效率
  • 從 Office 文件中提取文本,幫助您實現全文索引功能 (大部分時間這個功能被用於創建搜索引擎。)
  • 從 Office 文件中提取圖片
  • 生成包含公式的 Excel 表單

NPOI 與 Excel

NPOI 是一個 C# 版本的 POI Java 該專案由 Apache 開發。它是免費且開源的。此外,它不需要 Interop,這意味著用戶不需要安裝 Excel 即可讓開發者的應用程式與其協作。

IronXL 與 Excel

IronXL 是適用於 VB 和 C# 的 Excel API。使用 IronXL,您可以在 .NET 中讀取、編輯和創建 Excel 試算表文件。

NPOI 和 IronXL Excel 函式庫的常見功能

NPOIIronXL
儲存格範圍儲存格範圍
儲存格樣式(邊框、顏色、填充、字體、數字、對齊)儲存格視覺樣式 字體、大小、背景圖案、邊框、對齊和數字格式。
公式計算公式
資料驗證資料驗證
條件格式化條件格式化
圖像圖像
圖表圖表

表格 1 功能比較


安裝 IronXL 和 NPOI

您可以通過手動下載、使用 NuGet 或 Visual Studio 中的 NuGet 套件管理器安裝這兩個庫。以下是快速概述。

NPOI 安裝

安裝 NPOI 使用 NuGet

要通過 NuGet 安裝 NPOI,請打開 Visual Studio 開發者命令提示符並輸入以下內容:

圖形使用者介面自動生成的描述

圖 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 文件

使用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 Software 支援代理請求功能,他們樂意為您提供幫助。這是開源軟體所無法提供的。

下載

此專案可在 GitHub 上獲取:

IronXL vs NPOI 示例

< 上一頁
IronXL 和 CsvHelper 的比較
下一個 >
IronXL 和 Aspose Cells 的比較

準備開始了嗎? 版本: 2024.10 剛剛發布

免費 NuGet 下載 總下載次數: 1,023,839 查看許可證 >