在實際環境中測試
在生產環境中測試無浮水印。
在任何需要的地方都能運作。
正如您所知,Excel 可能是世界上最常用的電子表格應用程式。 使用者包括開發人員和一般大眾,但此文章可能會更吸引開發人員。 最初,開發人員在其各種應用程式中處理 Excel 的選擇並不多。 但是,有VBA(應用程式的視覺化基礎設計)內建於 Office 套件中,讓您可以根據需求操作任何 Office 產品。
開發者使用 VBA 在 Excel 中自定義與 Excel 及其數據的互動,甚至其視覺功能。 但是,最終這還是不夠。 開發者們希望得到更多功能,因此他們開始使用 Office.Interop。
在本文中,我將比較兩個不依賴 Office.Interop 的非常好的 Excel 庫來處理 Excel。 它們是:
IronXL
*NPOI
您將會看到和學習每個 Excel 庫能做到的事情,然後透過程式碼範例和逐步教程來比較這兩個庫。 儘管本文無法涵蓋這兩個 Excel 庫的所有功能,但它將解釋每個庫最常見和最受歡迎的用法。
取得工作表
方法取得列
方法獲取儲存格
方法NPOI 是 POI Java 專案的 .NET 版本 http://poi.apache.org/. POI 是一個開源項目,可以幫助您讀寫 xls、doc、ppt 文件。 它有廣泛的應用範圍。
例如,您可以用它來:
NPOI 是 C# 版本的 POI Java 由 Apache 項目。 它是免費且開源的。 此外,它無需 Interop,也就是說用戶無需安裝 Excel 即可使開發者的應用程式正常運行。
IronXL 是一個用於 VB 和 C# 的 Excel API。 使用 IronXL,您可以在 .NET 中讀取、編輯和創建 Excel 試算表檔案。
NPOI | IronXL |
---|---|
儲存格範圍 | 儲存格範圍 |
儲存格樣式(邊框、顏色、填充、字體、數字、對齊) | 儲存格視覺樣式 字體、大小、背景圖案、邊框、對齊和數字格式。 |
公式計算 | 公式 |
資料驗證 | 資料驗證 |
條件格式化 | 條件格式化 |
圖像 | 圖像 |
圖表 | 圖表 |
您可以通過手動下載、使用 NuGet 或在 Visual Studio 的 NuGet 套件管理器中安裝這兩個庫。 以下是一個快速概覽。
要透過 NuGet 安裝 NPOI,請開啟 Visual Studio 開發人員命令提示字元並輸入以下內容:
使用以下步驟通過 Visual Studio 的 NuGet 套件管理器安裝 IronXL 或 NPOI:
要下載IronXL,請導航至以下 網址 並點擊「下載」按鈕。
要通過NuGet安裝IronXL,請打開Visual Studio開發者命令提示符,然後輸入以下內容:
使用以下步驟在 Visual Studio 中透過 NuGet 套件管理器安裝 IronXL:
以下程式碼展示如何使用 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
以下程式碼讀取現有的 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
以下程式碼示範如何使用IronXL讀取Excel文件並在資料網格視圖中顯示。 添加以下程式碼並包含命名空間:
using IronXL;
using IronXL;
Imports IronXL
注意包含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
正如您所見,這一切減少了大量的工作。
那麼為什麼選擇IronXL? 正如您所見,IronXL 擁有易於使用的 API,能保持您的代碼整潔。 使用IronXL的程式庫以清晰、可讀的代碼為榮,這是一項能夠回報的投資,因為這可以減少理解代碼所需的時間和精力,並且允許在不破壞其他功能的情況下進行更改。
IronXL 更直觀且同樣強大如 NPOI。 當然,擁有授權金鑰後,您便能享有付費軟件的最重要優勢:您將獲得我們的專業支持、穩定且可靠的更新計劃,並可向 Iron Software 支持人員提出功能需求,他們樂意為您提供協助。 這是開源軟體無法提供的。
此專案可在 GitHub 上獲得: IronXL vs NPOI 示例