跳過到頁腳內容
與其他組件的比較
NPOI 與 IronXL 的比較

IronXL 與 NPOI 的比較

如您所知,Excel 大概是全球使用最廣泛的試算表應用程式。 使用者包括開發者和一般大眾,但本篇文章可能更吸引開發者的注意。 起初,開發者沒有太多選擇可以在不同應用程式中使用 Excel。 然而,Office Suite 內建的 VBA(Visual Basic for Applications)可以讓您根據需求操控任何 Office 產品。

開發者使用 Excel 中的 VBA 來自訂與 Excel 和其資料的互動,甚至是其視覺能力。 但最終這還是不夠。 開發者想要更多,因此他們開始使用 Office.Interop。

本文將比較兩個非常好的 Excel 程式庫,它們不依賴 Office.Interop 來使用 Excel。 它們是:

  • IronXL
  • NPOI

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

什麼是 NPOI?

NPOI is the .NET version of the POI Java project at http://poi.apache.org/. POI 是一個開源專案,可以幫助您讀取/寫入 xls、doc、ppt 檔案。 它有廣泛的應用範圍。

例如,您可以用它來:

  • 在伺服器上未安裝 Microsoft Office Suite 的情況下生成一個更高效的 Excel 報表,而不需要在背景中呼叫 Microsoft Excel ActiveX
  • 從 Office 文件中提取文本以協助實施全文索引功能(此功能大多用於創建搜尋引擎)
  • 從 Office 文件中提取圖片
  • 生成包含公式的 Excel 工作表

NPOI 和 Excel

NPOI is a C# port of the POI Java project by Apache. 它是免費且開源的。 另外,它不需要 Interop,這意味著用戶不需要安裝 Excel 來讓開發者的應用程式正常使用。

IronXL 和 Excel

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

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

NPOI IronXL
單元格範圍 單元格範圍
單元格樣式(邊框、顏色、填充、字體、數字、對齊) 單元格視覺樣式 字體、大小、背景模式、邊框、對齊和數字格式。
公式計算 公式
資料驗證 資料驗證
條件格式化 條件格式化
圖片 圖片
圖表 圖表

**表格 1** - 功能比較


IronXL 和 NPOI 的安裝

您可以透過手動下載、NuGet 或使用 Visual Studio 中的 NuGet Package Manager 安裝這兩個程式庫。 這是一個快速概述。

NPOI 安裝

使用 NuGet 安裝 NPOI

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

Install-Package NPOI -Version x.x.x
Graphical user interfaceDescription automatically generated

**圖 1** - NuGet NPOI 安裝

Visual Studio NuGet Package Manager 和 NPOI

使用以下步驟通過 Visual Studio 中的 NuGet Package Manager 安裝 IronXL 或 NPOI:

  • 在 Solution Explorer 中右鍵單擊專案
  • 選擇管理 NuGet 套件
  • 搜尋您的套件
  • 點擊安裝
A screenshot of a computerDescription automatically generated

**圖 2** - NuGet Package Manager 用於 NPOI

IronXL 安裝

下載 IronXL

To download IronXL, navigate to the following URL and click the "Download" button.

Download IronXL

**圖 3** - 下載 IronXL

使用 NuGet 安裝 IronXL

要通過 NuGet 安裝 IronXL,請打開 Visual Studio 開發人員命令提示符並輸入以下命令:

Install-Package IronXl.Excel -Version x.x.x
NuGet IronXL Installation

**圖 4** - NuGet IronXL 安裝

Visual Studio NuGet Package Manager 和 IronXL

使用以下步驟透過 Visual Studio 中的 NuGet Package Manager 安裝 IronXL:

  • 在 Solution Explorer 中右鍵單擊專案
  • 選擇管理 NuGet 套件
  • 搜尋您的套件
  • 點擊安裝
A screenshot of a computerDescription automatically generated

**圖 5** - NuGet Package Manager 用於 IronXL

使用 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;
$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();
}
$vbLabelText   $csharpLabel

使用 IronXL 讀取 Excel 文件

以下程式碼展示了如何使用 IronXL 讀取 Excel 文件並顯示在數據網格視圖內。 添加以下程式碼並包括命名空間:

using IronXL;
using System.Data;
using IronXL;
using 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;
}
$vbLabelText   $csharpLabel

如您所見,這樣做總共減少了很多工作量。

結論

那麼為什麼選擇 IronXL? 如您所見,IronXL 擁有易於使用的 API,保持您的程式碼清晰。 使用 IronXL 的程式庫擁有乾淨、可讀的程式碼,這種投資回報在於減少理解程式碼所需的時間和精力,使其能夠在不破壞東西的情況下被修改。

IronXL 整體上更直觀,同時功能和 NPOI 一樣強大。 當然,通過授權金鑰,您可以獲得付費軟體最重要的優勢:我們的專業支援、穩定可靠的更新計畫,以及向 Iron Software 支援代理請求功能的能力,他們樂意協助您。 這是開源軟體無法提供的。

下載

此專案可在 GitHub 上獲得:

IronXL vs NPOI 範例

請注意NPOI 是其各自所有者的註冊商標。 本網站與 NPOI 無隸屬關係,也未獲其認可或贊助。 所有產品名稱、標誌和品牌是其各自所有者的財產。 比較僅供信息參考,反映了撰寫時可公開獲得的信息。

常見問題解答

在 C# 中操控 Excel 的 Office.Interop 替代方案是什麼?

IronXL 是 C# 中操控 Excel 的 Office.Interop 替代方案。它提供了一個用戶友好的 API,使開發者無需安裝 Microsoft Office 即可創建、讀取和編輯 Excel 文件。

如何在 C# 中將 Excel 文件轉換為 PDF?

您可以使用 IronXL 在 C# 中將 Excel 文件轉換為 PDF,方法是使用 WorkBook.Load 加載 Excel 工作簿,然後使用 WorkBook.SaveAs 方法將文件保存為 PDF 格式。

使用 IronXL 來操控 Excel 文件的主要優勢是什麼?

IronXL 提供了一個更直觀的 API 以簡化代碼維護、專業支持、定期更新,以及在無需安裝 Microsoft Office 的情況下處理 Excel 文件,這使其成為開發者的強大選擇。

IronXL 可以通過 NuGet 安裝嗎?

是的,IronXL 可以通過 NuGet 安裝。打開 Visual Studio 開發者命令提示符,然後輸入 Install-Package IronXL.Excel -Version x.x.x

使用 IronXL 可以執行哪些常見的 Excel 相關任務?

使用 IronXL,開發者可以執行如讀寫 Excel 文件、設置單元格樣式、使用公式、驗證數據、應用條件格式、處理圖像和圖表等任務。

如何在 C# 中無需 Microsoft Office 讀取 Excel 文件?

使用 IronXL,您可以在 C# 中讀取 Excel 文件,方法是使用 WorkBook.Load 加載工作簿,訪問工作表,並使用簡單的方式迭代行和單元格。

為什麼選擇 IronXL 而不是開源替代方案來操控 Excel?

IronXL 提供了更用戶友好的 API、專業支持、定期更新以及持續的功能請求,這與 NPOI 等開源替代方案相比是其優勢。

NPOI 和 IronXL 在操控 Excel 文件方面有何不同?

NPOI 是基於 Apache POI 項目的開源庫,用於在無需 Microsoft Office 的情況下處理 Excel 文件。然而,IronXL 提供了一個更直觀的 API、專業支持和定期更新,使其適合商業應用。

將 Excel 工作表轉換為 DataTable 的過程是什麼?

要使用 IronXL 將 Excel 工作表轉換為 DataTable,請使用 WorkBook.Load 加載工作簿,訪問所需的工作表,並使用可用的方法將其轉換為 DataTable 以便進一步使用。

IronXL 如何在 .NET 應用中增強 Excel 文件管理?

IronXL 通過提供乾淨且直觀的 API 增強 .NET 應用中的 Excel 文件管理,輕鬆完成如讀取、編輯和創建 Excel 文件的任務,而無需依賴 Microsoft Office 的安裝。

Jordi Bardia
軟體工程師
Jordi 在 Python、C# 和 C++ 上最得心應手,當他不在 Iron Software 展現技術時,便在做遊戲編程。在分担產品测测试,產品開發和研究的责任時,Jordi 為持续的產品改進增值。他说这种多样化的经验使他受到挑战并保持参与, 而这也是他与 Iron Software 中工作一大乐趣。Jordi 在佛罗里达州迈阿密长大,曾在佛罗里达大学学习计算机科学和统计学。

鋼鐵支援團隊

我們每週 5 天,每天 24 小時在線上。
聊天
電子郵件
打電話給我