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 庫的所有功能,但會解釋它們各自最常見和最受歡迎的用途。
如何在 C# 中使用 Excel 的 NPOI
- 安裝 C# 庫以使用 NPOI 讀取 Excel 文件
- 實例化XSSFWorkbook物件以儲存 Excel 文件
- 使用
GetSheetAt方法取得指定的工作表 - 透過向
GetRow方法傳遞行索引來存取每一行。 - 使用
GetCell方法存取行中的每個單元格
什麼是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 庫的通用庫功能
| NPOI | IronXL |
|---|---|
| 單元格範圍 | 單元格範圍 |
| 儲存格樣式(邊框、顏色、填滿、字型、數字、對齊方式) | 單元格視覺樣式:字體、大小、背景圖案、邊框、對齊方式和數字格式。 |
| 公式計算 | 公式 |
| 數據驗證 | 數據驗證 |
| 條件格式 | 條件格式 |
| 圖像 | 圖像 |
| 圖表 | 圖表 |
表 1 - 功能對比
IronXL 和 NPOI 的安裝
你可以透過手動下載、透過 NuGet 或使用 Visual Studio 中的 NuGet 套件管理器來安裝這兩個函式庫。 以下是簡要概述。
NPOI 安裝
使用 NuGet 安裝 NPOI
若要透過 NuGet 安裝 NPOI,請開啟 Visual Studio 開發人員命令提示字元並輸入以下命令:
Install-Package NPOI -Version x.x.x

圖 1 - NuGet NPOI 安裝
Visual Studio NuGet 套件管理器和 NPOI
請依照下列步驟透過 Visual Studio 中的 NuGet 套件管理器安裝 IronXL 或 NPOI:
在解決方案資源管理器中以滑鼠右鍵按一下項目
- 選擇"管理 NuGet 套件"
- 瀏覽您的套餐 點選安裝

圖 2 - NPOI 的 NuGet 套件管理器
IronXL 安裝
下載 IronXL
To download IronXL, navigate to the following URL and click the "Download" button.

圖 3 - 下載 IronXL
使用 NuGet 安裝 IronXL
若要透過 NuGet 安裝 IronXL,請開啟 Visual Studio 開發人員命令提示字元並輸入下列命令:
Install-Package IronXL.Excel -Version x.x.x

圖 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 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;Imports NPOI.SS.UserModel
Imports NPOI.XSSF.UserModel
Imports System.Data
Imports System.IO
Imports System.Collections.Generic以下程式碼讀取一個現有的 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();
}Public Sub ReadExcelNPOI()
Dim dtTable As New DataTable()
Dim lstRows As New List(Of String)()
Dim objWorksheet As ISheet
Dim strPath As String = "c:\temp\NPOI_Test.XLSX"
' Use FileStream to open the Excel file
Using fStream = New FileStream(strPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)
fStream.Position = 0
Dim objWorkbook As New XSSFWorkbook(fStream)
objWorksheet = objWorkbook.GetSheetAt(0)
Dim objHeader As IRow = objWorksheet.GetRow(0)
Dim countCells As Integer = objHeader.LastCellNum
' Add columns to the DataTable based on the header row of Excel
For j As Integer = 0 To countCells - 1
Dim objCell As ICell = objHeader.GetCell(j)
If objCell Is Nothing OrElse String.IsNullOrWhiteSpace(DirectCast(objCell, Object).ToString()) Then
Continue For
End If
If True Then
dtTable.Columns.Add(DirectCast(objCell, Object).ToString())
End If
Next j
' Add rows to the DataTable, looping through each row and cell
For i As Integer = (objWorksheet.FirstRowNum + 1) To objWorksheet.LastRowNum
Dim objRow As IRow = objWorksheet.GetRow(i)
If objRow Is Nothing OrElse objRow.Cells.All(Function(d) d.CellType = CellType.Blank) Then
Continue For
End If
For j As Integer = objRow.FirstCellNum To countCells - 1
Dim cell As ICell = objRow.GetCell(j)
If cell IsNot Nothing AndAlso Not String.IsNullOrEmpty(DirectCast(cell, Object).ToString()) AndAlso Not String.IsNullOrWhiteSpace(DirectCast(cell, Object).ToString()) Then
lstRows.Add(DirectCast(cell, Object).ToString())
End If
Next j
If lstRows.Count > 0 Then
dtTable.Rows.Add(lstRows.ToArray())
End If
lstRows.Clear()
Next i
End Using
' Assuming dataGridView1 is a DataGridView control on a Form
dataGridView1.DataSource = dtTable
End Sub
Private Sub button1_Click(ByVal sender As Object, ByVal e As EventArgs)
ReadExcelNPOI()
End Sub使用 IronXL 讀取 Excel 文件
以下程式碼示範如何使用 IronXL 讀取 Excel 檔案並將其顯示在資料網格視圖中。 新增以下程式碼並包含命名空間:
using IronXL;
using System.Data;using IronXL;
using System.Data;Imports IronXL
Imports System.Data請注意其中包含 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;
}Private Sub button2_Click(ByVal sender As Object, ByVal e As EventArgs)
' Load the Excel workbook
Dim strPath As String = "c:\temp\NPOI_Test.XLSX"
Dim workbook As WorkBook = WorkBook.Load(strPath)
' Access the default worksheet
Dim sheet As WorkSheet = workbook.DefaultWorkSheet
' Convert the worksheet to a DataTable
Dim dtTable = sheet.ToDataTable(True)
' Assuming dataGridView1 is a DataGridView control on a Form
dataGridView1.DataSource = dtTable
End Sub如你所見,這一切加起來就大大減少了工作量。
結論
那麼,為什麼選擇 IronXL? 如您所見,IronXL 擁有易於使用的 API,可保持您的程式碼簡潔。 使用 IronXL 的庫擁有簡潔、易讀的程式碼,這是一項值得的投資,因為它減少了理解程式碼功能所需的時間和精力,並且允許在不破壞現有功能的情況下對其進行更改。
IronXL 各方面都更加直覺易用,同時功能也與 NPOI 一樣強大。 當然,有了許可證金鑰,您就可以享受付費軟體最重要的優勢:您可以獲得我們的專業支援、持續可靠的更新計劃,以及向 Iron Software 支援人員請求功能的能力,他們很樂意為您提供協助。 這是開源軟體無法提供的。
下載
該專案已在 GitHub 上開源:
常見問題解答
在 C# 中使用 Office.Interop 進行 Excel 操作的替代方法是什麼?
IronXL 是在 C# 中使用 Office.Interop 進行 Excel 操作的替代方案。它提供了用戶友好的 API,允許開發人員在不需要安裝 Microsoft Office 的情況下創建、讀取和編輯 Excel 檔案。
如何在 C# 中將 Excel 檔案轉換為 PDF?
您可以使用 IronXL 在 C# 中將 Excel 檔案轉換為 PDF,方法是使用 WorkBook.Load 載入 Excel 工作簿,然後再使用 WorkBook.SaveAs 方法將檔案儲存為 PDF 格式。
使用 IronXL.Excel 處理 Excel 檔案有哪些主要優點?
IronXL 提供更直覺的 API,讓程式碼維護更容易、專業的支援、定期的更新,以及在沒有安裝 Microsoft Office 的情況下處理 Excel 檔案的能力,使其成為開發人員的有力選擇。
IronXL 可以透過 NuGet 安裝嗎?
是的,IronXL 可以透過 NuGet 安裝。打開 Visual Studio 開發人員指令提示,然後輸入 Install-Package IronXL.Excel -Version x.x.x。
使用 IronXL.Excel 可以執行哪些常見的 Excel 相關工作?
使用 IronXL.Excel,開發人員可以執行讀取和寫入 Excel 檔案、設定單元格樣式、使用公式、驗證資料、套用條件格式,以及處理圖片和圖表等工作。
在沒有 Microsoft Office 的情況下,如何用 C# 閱讀 Excel 檔案?
透過 IronXL,您可以使用 WorkBook.Load 載入工作簿,存取工作表,並使用直接的方法迭代行和儲存格,以 C# 語言讀取 Excel 檔案。
為何要選擇 IronXL 而非其他開放原始碼的 Excel 操作軟體?
IronXL 提供更容易使用的 API、Professional 支援、定期更新以及持續的功能需求,這些都是相較於 NPOI 等開放原始碼替代方案的優勢。
在 Excel 檔案處理方面,NPOI 與 IronXL.Excel 有何不同?
NPOI 是基於 Apache POI 專案的開放源碼函式庫,可在沒有 Microsoft Office 的情況下處理 Excel 檔案。IronXL 則提供更直覺的 API、專業的支援和定期的更新,適合商業應用。
使用 IronXL.Excel 將 Excel 工作表轉換為 DataTable 的流程為何?
若要使用 IronXL 將 Excel 工作表轉換為 DataTable,請使用 WorkBook.Load 載入工作簿,存取所需的工作表,並使用可用的方法將其轉換為 DataTable 以供進一步使用。
IronXL 如何增強 .NET 應用程式中的 Excel 檔案管理?
IronXL 透過提供簡潔直觀的 API,增強了 .NET 應用程式中的 Excel 檔案管理功能,可輕鬆完成讀取、編輯和建立 Excel 檔案等工作,而無需依賴 Microsoft Office 的安裝。







