在實際環境中測試
在生產環境中測試無浮水印。
在任何需要的地方都能運作。
正如您所知,Excel 可能是世界上最常用的電子表格應用程式。用戶包括開發人員和一般民眾,但這篇文章可能更吸引開發人員。最初,開發人員在其各種應用程式中處理 Excel 的選擇並不多。然而,有 VBA (應用程式的視覺化基礎設計) 內建於 Office 套件中,您可以根據需要操作任何 Office 產品。
開發人員在 Excel 中使用 VBA 來自訂他們與 Excel 和其數據的互動,甚至是視覺能力。但最終這還不夠。開發人員需要更多,所以他們開始使用 Office.Interop。
在本文中,我將比較兩個非常好的 Excel 程式庫,它們不依賴於 Office.Interop 來處理 Excel。它們是:
您將會看到並學習每個 Excel 程式庫的功能,然後通過代碼範例和逐步教程來比較這兩者。儘管本文無法涵蓋這兩個 Excel 程式庫的所有功能,但會解釋每個程式庫中最常見和最受歡迎的用法。
取得工作表
方法取得列
方法獲取儲存格
方法NPOI是用於.NET的POI Java項目版本 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 上獲取: