IronXL 與 NPOI 的比較
IronXL和NPOI都是.NET的Excel程式庫,可以在不需要Office.Interop的情況下運行,不需要安裝Microsoft Excel。 此比較涵蓋其讀取、寫入和操控Excel文件的API,並提供開發人員最常遇到的操作的程式碼範例。
如何在C#中使用NPOI處理Excel
- 安裝C#程式庫以使用NPOI讀取Excel
- 實例化XSSFWorkbook物件來儲存Excel文件
- 使用
GetSheetAt方法獲取特定工作表 - 通過傳遞行索引給
GetRow方法存取每行 - 使用
GetCell方法存取行中的每個單元格
什麼是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是Apache POI Java專案的C#版本。 它是免費和開源的。 此外,它不需要Interop,這意味著使用者不需要安裝Excel即可使開發者的應用程式運行。
IronXL和Excel
IronXL是一個適用於VB和C#的Excel API。 使用IronXL,您可以在.NET中讀取、編輯和建立Excel試算表文件。
NPOI和IronXL如何比較?
| NPOI | IronXL |
|---|---|
| 單元格範圍 | 單元格範圍 |
| 單元格樣式(邊框、顏色、填充、字體、數字、對齊) | 單元格視覺樣式 字體、尺寸、背景圖案、邊框、對齊和數字格式。 |
| 公式計算 | 公式 |
| 資料驗證 | 資料驗證 |
| 條件格式化 | 條件格式化 |
| 圖片 | 圖片 |
| 圖表 | 圖表 |
**表1** - 功能比較
評估IronXL作為NPOI替代品的團隊可以使用免費30天試用版來測試完整的API。
IronXL和NPOI的安裝
您可以通過手動下載、使用NuGet或在Visual Studio中的NuGet套件管理器安裝這兩個程式庫。 這裡是快速概述; 有關逐步演練,請參閱IronXL入門指南。
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
要下載IronXL,請導航到以下URL並點擊"下載"按鈕。
圖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套件管理器
從Excel文件中讀取和寫入使用NPOI和IronXL
使用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文件並顯示在資料網格視圖中。 有關更多IronXL程式碼範例,請參閱文件。 新增以下程式碼,並包含命名空間:
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將讀取和顯示操作減少到大約5行程式碼,相比之下,NPOI需要超過40行,完全省去了手動行迭代和逐個單元格提取迴圈。 瀏覽完整的IronXL功能指南,以獲得對常見Excel任務更簡化的方法。
您應選擇哪個程式庫?
NPOI為.NET中的Excel操作提供了一個穩健、經過驗證的開源基礎 - 其作為Apache POI移植的優勢使其受益於多年來的社區貢獻和廣泛的格式覆蓋。 對於主要需求是使用免費、社區驅動的包讀取和寫入試算表的團隊來說,NPOI是一個可靠的選擇。
通常團隊碰到的摩擦是NPOI在常見操作中需要大量模板程式碼。 如上所述的讀取文件範例所示,IronXL的方法需要大約5行程式碼,而NPOI同樣的操作需要超過40行程式碼 - 載入工作簿並在資料網格中顯示,完全消除了手動的行和單元格迭代迴圈。 這種程式碼面積的減少是一項回報良好的投資,因為它使維護更容易,尤其是在減少了錯誤出現的地方。
IronXL還包括專業支持、一致的更新計劃,以及直接從Iron Software工程師那裡請求功能的能力。 社區驅動的專案在這方面提供了不同的權衡:有更廣泛的貢獻者輸入,但對於特定問題回應時間的可預測性較低。
除了授權成本,專案的總成本還包括開發人員用於撰寫和維護NPOI較低級API所需的額外模板程式碼的開發時間,以及如上例所示的手動資料映射邏輯的除錯。 對於評估多年專案生命週期成本的團隊來說,這些開發和維護成本常常超出開源和商業授權之間的差額。
下載
此專案在 GitHub 上可用:
準備好在自己的專案中看到差異了嗎? 開始一個免費的30天IronXL試用,以在本地運行這些範例。
常見問題
在 C# 中有什麼替代方案可以使用 Office.Interop 進行 Excel 操作?
IronXL 是在 C# 中操作 Excel 的替代方案。它提供易於使用的 API,使開發者能夠在無需安裝 Microsoft Office 的情況下建立、讀取和編輯 Excel 檔。
我如何在C#中將Excel檔案轉換為PDF?
您可以使用 IronXL 在 C# 中將 Excel 檔轉換為 PDF,透過載入 Excel 工作簿使用 WorkBook.Load,然後使用 WorkBook.SaveAs 方法以 PDF 格式儲存檔案。
using IronXL 操作 Excel 檔案有哪些關鍵優勢?
IronXL 提供更直觀的 API 以便於程式碼維護,專業支援,定期更新,並能在無需安裝 Microsoft Office 的情況下處理 Excel 檔,使其成為開發人員的強大選擇。
IronXL 可以透過 NuGet 安裝嗎?
是的,IronXL 可以透過 NuGet 安裝。打開 Visual Studio 開發者命令提示符並輸入 Install-Package IronXL.Excel -Version x.x.x。
using IronXL 可以執行哪些常見的 Excel 相關任務?
透過使用 IronXL,開發者可以執行閱讀和寫入 Excel 檔案、單元格樣式設置、使用公式、資料驗證、套用條件格式化、以及處理圖片和圖表等任務。
如何在不使用 Microsoft Office 的情況下在 C# 中讀取 Excel 檔案?
using IronXL,您可以通過使用 WorkBook.Load 載入工作簿、存取工作表,並使用簡單的方法迭代行和單元格,來在 C# 中讀取 Excel 檔案。
為什麼選擇 IronXL 而不是開源替代方案來操作 Excel?
IronXL 提供更友好的 API、專業支援、定期更新和持續的功能要求,相較於像 NPOI 這樣的開源替代方案是有優勢的。
NPOI與 IronXL 在 Excel 文件操作上有何不同?
NPOI 是一個基於 Apache POI 項目的開源庫,用於在沒有 Office 的情況下處理 Excel 檔案。然而,IronXL 提供更直觀的 API、專業支援和定期更新,使其適用於商業應用。
using IronXL 將 Excel 工作表轉換為 DataTable 的過程是怎樣的?
要使用 IronXL 將 Excel 工作表轉換為 DataTable,需載入工作簿使用 WorkBook.Load,存取所需工作表,並使用可用的方法將其轉換為 DataTable 以供進一步使用。
IronXL 如何提升 .NET 應用程式中的 Excel 檔案管理?
IronXL 在 .NET 應用程式中通過提供簡潔直觀的 API 來增強 Excel 檔案管理,輕鬆完成讀取、編輯和建立 Excel 檔案等任務,無需依賴 Microsoft Office 安裝。



