跳至頁尾內容
與其他組件相比
NPOI 與 IronXL 的比較

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 庫的所有功能,但會解釋它們各自最常見和最受歡迎的用途。

什麼是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 庫的通用庫功能

NPOIIronXL
單元格範圍單元格範圍
儲存格樣式(邊框、顏色、填滿、字型、數字、對齊方式)單元格視覺樣式:字體、大小、背景圖案、邊框、對齊方式和數字格式。
公式計算公式
數據驗證數據驗證
條件格式條件格式
圖像圖像
圖表圖表

表 1 - 功能對比


IronXL 和 NPOI 的安裝

你可以透過手動下載、透過 NuGet 或使用 Visual Studio 中的 NuGet 套件管理器來安裝這兩個函式庫。 以下是簡要概述。

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 套件管理器和 NPOI

請依照下列步驟透過 Visual Studio 中的 NuGet 套件管理器安裝 IronXL 或 NPOI:

在解決方案資源管理器中以滑鼠右鍵按一下項目

  • 選擇"管理 NuGet 套件"
  • 瀏覽您的套餐 點選安裝
A screenshot of a computerDescription automatically generated

圖 2 - NPOI 的 NuGet 套件管理器

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 套件管理器和 IronXL

請依照下列步驟透過 Visual Studio 中的 NuGet 套件管理器安裝 IronXL:

在解決方案資源管理器中以滑鼠右鍵按一下項目

  • 選擇"管理 NuGet 套件"
  • 瀏覽您的套餐 點選安裝
A screenshot of a computerDescription automatically generated

圖 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;
$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 與 NPOI 對比範例

請注意NPOI 是其各自所有者的註冊商標。 本網站與NPOI沒有任何關聯,也未獲得NPOI的認可或贊助。 所有產品名稱、標誌和品牌均為其各自擁有者的財產。 比較資料僅供參考,並反映撰寫時的公開資訊。

常見問題解答

在 C# 中,除了使用 Office.Interop 之外,還有哪些方法可以進行 Excel 作業?

IronXL 是 C# 中用於操作 Excel 的 Office.Interop 的替代方案。它提供了一個用戶友好的 API,允許開發人員創建、讀取和編輯 Excel 文件,而無需安裝 Microsoft Office。

如何使用 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 xxx

使用 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 來增強 .NET 應用程式中的 Excel 檔案管理,無需依賴 Microsoft Office 安裝即可輕鬆執行讀取、編輯和建立 Excel 檔案等任務。

喬迪·巴迪亞
軟體工程師
喬迪精通Python、C#和C++,除了在Iron Software運用這些技能外,他還從事遊戲程式設計。他參與產品測試、產品開發和研究等工作,為產品的持續改進做出了巨大貢獻。豐富的經驗讓他始終保持挑戰性和工作熱情,他表示這是他最喜歡在Iron Software工作的原因之一。喬迪在佛羅裡達州邁阿密長大,畢業於佛羅裡達大學,主修電腦科學和統計學。