在實際環境中測試
在生產環境中測試無浮水印。
在任何需要的地方都能運作。
像 Word、Excel、PowerPoint 等 MS Office 工具在各類型企業中非常受歡迎且廣泛使用。 在軟體應用程式中生成 Excel 文件格式的報告文件是許多用戶所需的功能,現在有一種確定的方法可以使用各種可用的庫將此功能包含在軟體應用程式中。
在本文中,我們將討論並比較如何使用兩個最流行的程式庫——IronXL 和 Microsoft Office Excel Interop,以 C# 程式化地處理 Microsoft Excel 文件。
IronXL 和 Microsoft Excel Interop 都提供了在 .NET 框架中創建、編輯和讀取 Excel 文檔的方法。 下一個問題是決定哪一個 C# Excel 庫 最適合您的專案。 本文將幫助您為您的應用程式決定最佳選擇。
首先,我們來看看這兩個庫的提供內容,然後進行比較。
IronXL 是一個 .NET 函式庫,可以在 C# 中輕鬆讀取和編輯 Microsoft Excel 文件。 IronXL.Excel 是一個獨立的 .NET 軟體庫,用於讀取多種電子表格格式。 它不需要安裝 Microsoft Excel,也不依賴於 Interop。
IronXL 是一個直觀的 C# API,允許您在 .NET 中以極快的速度讀取、編輯和創建 Excel 試算表文件。 IronXL 完全支持 .NET Core、.NET Framework、Xamarin、移动、Linux、macOS 和 Azure。
IronXL 是一款領先的 .NET Core 和 .NET Framework Excel 試算表庫,用於 C#。
文件與支援
有用的入門程式片段和教程在ironsoftware.com
-GitHub 存儲庫更多範例
Microsoft.Office.Interop.Excel 命名空間提供在 C# 和 Visual Basic 中與 Microsoft Excel 應用程式互動的方法。 我們可以使用這個命名空間創建新的 Excel 工作簿、Excel 工作表、在現有工作表中顯示數據、修改現有的 Excel 工作表內容等等。
Microsoft.Office.Interop.Excel 中的類別和介面提供了在 Microsoft Excel 檔案的 COM 物件模型與自動化 xls 或 xlsx 檔案的受控應用程式之間的互操作支援。
C# 程式語言具備功能,使與 Microsoft Office Interop API 物件的操作更加輕鬆。 新功能包括命名和可選參數、一種稱為 dynamic 的新類型,以及在 COM 方法中將參數傳遞給參考參數的能力,像是它們是值參數一樣。 這使其成為處理 COM 和互操作對象的更佳選擇。
注意:Microsoft Excel Interop 物件需要在電腦上安裝 Microsoft Excel
其餘的文章如下:
建立主控台應用程式
IronXL C# 程式庫安裝
Microsoft Office Interop Excel 安裝
建立新的 Excel 工作簿和工作表
讀取 Excel 檔案
在 Excel 文件中處理值範圍
使用 Excel 公式
授權
使用以下步驟來創建一個控制台應用程式:
在 附加資訊 畫面中,指定您要使用的 Framework 版本。 在此範例中,我們將使用 .NET Framework 4.8。
點擊創建以完成該流程。
現在專案已建立,我們幾乎準備好測試這些函式庫。 但是,我們仍然需要安裝並將它們整合到我們的專案中。 讓我們先安裝IronXL。
您可以使用以下方法下載並安裝IronXL庫:
使用 Visual Studio 與 NuGet 套件。
直接下載 NuGet 套件。
手動安裝 DLL。
讓我們更仔細地看看每一個。
Visual Studio 提供 NuGet 套件管理器以在您的專案中安裝 NuGet 套件。 您可以通過專案選單存取它,或在方案總管中右鍵點擊您的專案。
現在,從瀏覽標籤 -> 搜尋 IronXL.Excel -> 安裝
另一種下載和安裝 Microsoft.Office.Interop.Excel C# 庫的方法是使用以下步驟通過開發人員命令提示字元安裝 NuGet 套件。
打開 Developer Command Prompt — 通常位於 Visual Studio 文件夾中。
輸入以下命令:
PM> Install-Package Microsoft.Office.Interop.Excel
在方案總管中,右鍵點擊 Program.cs 文件,然後點擊檢視程式碼。
using Excel = Microsoft.Office.Interop.Excel;
using Excel = Microsoft.Office.Interop.Excel;
Imports Excel = Microsoft.Office.Interop.Excel
工作簿是一個包含多個具有行和列的工作表的 Excel 文件。 這兩個庫都提供創建新的 Excel 工作簿和工作表的功能。 讓我們一步一步地看看這段代碼。
使用IronXL創建新的Excel工作簿再簡單不過了。! 只需一行代碼! 真的。 將以下程式碼添加到 Program.cs 文件中的 static void main 函數:
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
Dim workbook As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX)
這兩個XLS(較舊的 Excel 文件版本)和XLSX(當前及較新版本檔案)可以使用IronXL建立檔案格式。
而且,創建預設工作表更加簡單:
var worksheet = workbook.CreateWorkSheet("IronXL Features");
var worksheet = workbook.CreateWorkSheet("IronXL Features");
Dim worksheet = workbook.CreateWorkSheet("IronXL Features")
現在您可以使用工作表變數來設置單元格值,並完成Excel文件幾乎所有能做的事情。
要使用 Microsoft.Office.Interop 創建 Excel 文件,需要安裝 Microsoft Excel。 因此,我們需要檢查主機上是否安裝了 Microsoft Excel——如果沒有,則會返回需要處理的例外情況。 以下示例代碼允許您檢查 Excel 應用程式的安裝並創建 Excel 工作簿和工作表:
檢查 Microsoft Excel 是否已安裝:
//Start Excel and get Application object.
Excel.Application xlApp = new Excel.Application();
//Checks if Excel is installed
if (xlApp == null)
{
Console.WriteLine("Excel is not installed in the system...");
return;
}
//Start Excel and get Application object.
Excel.Application xlApp = new Excel.Application();
//Checks if Excel is installed
if (xlApp == null)
{
Console.WriteLine("Excel is not installed in the system...");
return;
}
'Start Excel and get Application object.
Dim xlApp As New Excel.Application()
'Checks if Excel is installed
If xlApp Is Nothing Then
Console.WriteLine("Excel is not installed in the system...")
Return
End If
創建工作簿和工作表:
//Create Workbook and Worksheet
object misValue = System.Reflection.Missing.Value;
Excel.Workbook xlWorkBook = xlApp.Workbooks.Add(misValue);
Excel.Worksheet xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
//Create Workbook and Worksheet
object misValue = System.Reflection.Missing.Value;
Excel.Workbook xlWorkBook = xlApp.Workbooks.Add(misValue);
Excel.Worksheet xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
'Create Workbook and Worksheet
Dim misValue As Object = System.Reflection.Missing.Value
Dim xlWorkBook As Excel.Workbook = xlApp.Workbooks.Add(misValue)
Dim xlWorkSheet As Excel.Worksheet = CType(xlWorkBook.Worksheets.Item(1), Excel.Worksheet)
到目前為止,查看這兩段代碼,IronXL 相較於 Office Interop Excel 具有優勢。 IronXL 只需一行代碼即可處理 Excel 文件,無需麻煩和額外的依賴項。
這兩個庫都可以打開和讀取現有的 Excel 文檔。 讓我們來看看示範代碼。
IronXL WorkBook 類別表示一個 Excel 工作表。 要在 C# 中打開 Excel 文件,我們使用 WorkBook.Load 並指定 Excel 文件的路徑。(.xlsx). 以下單行程式碼用於開啟檔案以供讀取:
//Load WorkBook
var workbook = WorkBook.Load(@"Spreadsheets\\sample.xlsx");
//Load WorkBook
var workbook = WorkBook.Load(@"Spreadsheets\\sample.xlsx");
'Load WorkBook
Dim workbook = WorkBook.Load("Spreadsheets\\sample.xlsx")
每個 WorkBook 可以有多個 WorkSheet 物件。 這些代表 Excel 文件中的工作表。 如果工作簿包含工作表,可以按名稱檢索它們,如下所示:
//Open Sheet for reading
var worksheet = workbook.GetWorkSheet("sheetnamegoeshere");
//Open Sheet for reading
var worksheet = workbook.GetWorkSheet("sheetnamegoeshere");
'Open Sheet for reading
Dim worksheet = workbook.GetWorkSheet("sheetnamegoeshere")
讀取單元格值的代碼:
// Read from Ranges of cells elegantly.
foreach (var cell in worksheet ["A2:A10"])
{
Console.WriteLine("Cell {0} has value '{1}'", cell.AddressString, cell.Text);
}
// Read from Ranges of cells elegantly.
foreach (var cell in worksheet ["A2:A10"])
{
Console.WriteLine("Cell {0} has value '{1}'", cell.AddressString, cell.Text);
}
' Read from Ranges of cells elegantly.
For Each cell In worksheet ("A2:A10")
Console.WriteLine("Cell {0} has value '{1}'", cell.AddressString, cell.Text)
Next cell
這也使用一行程式碼來開啟工作簿和工作表。 代碼如下:
Excel.Application xlApp = new Excel.Application();
//Load WorkBook
Excel.Workbook xlWorkBook = xlApp.Workbooks.Open(filePath);
//Open Sheet for reading
Excel.Worksheet xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
Excel.Application xlApp = new Excel.Application();
//Load WorkBook
Excel.Workbook xlWorkBook = xlApp.Workbooks.Open(filePath);
//Open Sheet for reading
Excel.Worksheet xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
Dim xlApp As New Excel.Application()
'Load WorkBook
Dim xlWorkBook As Excel.Workbook = xlApp.Workbooks.Open(filePath)
'Open Sheet for reading
Dim xlWorkSheet As Excel.Worksheet = CType(xlWorkBook.Worksheets.Item(1), Excel.Worksheet)
讀取單元格值的代碼:
//Get the entire range of cells
Excel.Range xlRange = xlWorkSheet.UsedRange;
//Reading first 10 rows of with two columns
for (int rowCount = 1; rowCount <= 10; rowCount++)
{
firstValue = Convert.ToString((xlRange.Cells [rowCount, 1] as Excel.Range).Text);
secondValue = Convert.ToString((xlRange.Cells [rowCount, 2] as Excel.Range).Text);
Console.WriteLine(firstValue + "\t" + secondValue);
}
//Get the entire range of cells
Excel.Range xlRange = xlWorkSheet.UsedRange;
//Reading first 10 rows of with two columns
for (int rowCount = 1; rowCount <= 10; rowCount++)
{
firstValue = Convert.ToString((xlRange.Cells [rowCount, 1] as Excel.Range).Text);
secondValue = Convert.ToString((xlRange.Cells [rowCount, 2] as Excel.Range).Text);
Console.WriteLine(firstValue + "\t" + secondValue);
}
Imports Microsoft.VisualBasic
'Get the entire range of cells
Dim xlRange As Excel.Range = xlWorkSheet.UsedRange
'Reading first 10 rows of with two columns
For rowCount As Integer = 1 To 10
firstValue = Convert.ToString((TryCast(xlRange.Cells (rowCount, 1), Excel.Range)).Text)
secondValue = Convert.ToString((TryCast(xlRange.Cells (rowCount, 2), Excel.Range)).Text)
Console.WriteLine(firstValue & vbTab & secondValue)
Next rowCount
但是,檢查 Excel 的安裝並創建其實例是不可或缺的一部分。
在IronXL中,我們可以用一行代碼獲取特定單元格的數值範圍。 然後,使用迴圈可以讀取或編輯每個儲存格的值。 代碼如下:
WorkBook workbook = WorkBook.Load("test.xls");
WorkSheet sheet = workbook.WorkSheets.First();
//This is how we get range from Excel worksheet
var range = sheet ["A2:A8"];
//This is how we can iterate over our range and read or edit any cell
foreach (var cell in range)
{
Console.WriteLine(cell.Value);
}
WorkBook workbook = WorkBook.Load("test.xls");
WorkSheet sheet = workbook.WorkSheets.First();
//This is how we get range from Excel worksheet
var range = sheet ["A2:A8"];
//This is how we can iterate over our range and read or edit any cell
foreach (var cell in range)
{
Console.WriteLine(cell.Value);
}
Dim workbook As WorkBook = WorkBook.Load("test.xls")
Dim sheet As WorkSheet = workbook.WorkSheets.First()
'This is how we get range from Excel worksheet
Dim range = sheet ("A2:A8")
'This is how we can iterate over our range and read or edit any cell
For Each cell In range
Console.WriteLine(cell.Value)
Next cell
這也使用一行程式碼來獲取儲存格範圍的值。 然後可以用所需的值更新這些單元格。 代碼如下:
Excel.Application xlApp = new Excel.Application();
Excel.Workbook xlWorkBook = xlApp.Workbooks.Open(filePath);
Excel.Worksheet xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
//Get range of values and updating their format
var range = xlWorkSheet.get_Range("A1", "D1");
range.NumberFormat = "$0.00";
Excel.Application xlApp = new Excel.Application();
Excel.Workbook xlWorkBook = xlApp.Workbooks.Open(filePath);
Excel.Worksheet xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
//Get range of values and updating their format
var range = xlWorkSheet.get_Range("A1", "D1");
range.NumberFormat = "$0.00";
Dim xlApp As New Excel.Application()
Dim xlWorkBook As Excel.Workbook = xlApp.Workbooks.Open(filePath)
Dim xlWorkSheet As Excel.Worksheet = CType(xlWorkBook.Worksheets.Item(1), Excel.Worksheet)
'Get range of values and updating their format
Dim range = xlWorkSheet.get_Range("A1", "D1")
range.NumberFormat = "$0.00"
Excel 公式是處理 Excel 文件的最重要部分。 這兩個函式庫都提供方便處理公式並將它們應用於單元格的功能。
載入工作簿和工作表後,可以使用以下代碼範例來更改公式或應用到特定單元格。 代碼如下:
// Set Formulas
worksheet ["A1"].Formula = "Sum(B8:C12)";
worksheet ["B8"].Formula = "=C9/C11";
worksheet ["G30"].Formula = "Max(C3:C7)";
// Force recalculate all formula values in all sheets.
workbook.EvaluateAll();
// Set Formulas
worksheet ["A1"].Formula = "Sum(B8:C12)";
worksheet ["B8"].Formula = "=C9/C11";
worksheet ["G30"].Formula = "Max(C3:C7)";
// Force recalculate all formula values in all sheets.
workbook.EvaluateAll();
' Set Formulas
worksheet ("A1").Formula = "Sum(B8:C12)"
worksheet ("B8").Formula = "=C9/C11"
worksheet ("G30").Formula = "Max(C3:C7)"
' Force recalculate all formula values in all sheets.
workbook.EvaluateAll()
您還可以檢索公式及其值。
// Get Formulas
// Get the formula's calculated value. e.g. "52"
string formulaValue = worksheet ["G30"].Value;
//Get the formula as a string. e.g. "Max(C3:C7)"
string formulaString = worksheet ["G30"].Formula;
//Save your changes with updated formulas and calculated values.
workbook.Save();
// Get Formulas
// Get the formula's calculated value. e.g. "52"
string formulaValue = worksheet ["G30"].Value;
//Get the formula as a string. e.g. "Max(C3:C7)"
string formulaString = worksheet ["G30"].Formula;
//Save your changes with updated formulas and calculated values.
workbook.Save();
' Get Formulas
' Get the formula's calculated value. e.g. "52"
Dim formulaValue As String = worksheet ("G30").Value
'Get the formula as a string. e.g. "Max(C3:C7)"
Dim formulaString As String = worksheet ("G30").Formula
'Save your changes with updated formulas and calculated values.
workbook.Save()
同樣地,載入工作簿和工作表後,可以使用以下程式碼來處理 Excel 公式。 代碼示例如下:
//Get range of values and updating their format
var range1 = xlWorkSheet.get_Range("A1", "D1");
var range2 = xlWorkSheet.get_Range("C2", "C6");
// Set Formula
range1.Formula = "=RAND()*100000";
range2.Formula = "=A2 & \" \" & B2";
//Get range of values and updating their format
var range1 = xlWorkSheet.get_Range("A1", "D1");
var range2 = xlWorkSheet.get_Range("C2", "C6");
// Set Formula
range1.Formula = "=RAND()*100000";
range2.Formula = "=A2 & \" \" & B2";
'Get range of values and updating their format
Dim range1 = xlWorkSheet.get_Range("A1", "D1")
Dim range2 = xlWorkSheet.get_Range("C2", "C6")
' Set Formula
range1.Formula = "=RAND()*100000"
range2.Formula = "=A2 & "" "" & B2"
IronXL 是一個開放商業的 C# Excel 函式庫。 它在開發時免費,並且始終可以獲得商業部署的許可。 授權可用 單專案使用、單一開發人員、代理商和全球企業,以及 SaaS 和 OEM 重新分發。 所有授權均包含30天退款保證、一年的產品支援和更新,有效於開發/測試/生產環境,並且還有永久授權。(一次性購買). Lite 套裝的起價為 $749。
對於 Microsoft Office Interop Excel,使用此 DLL 檔案的應用程式無需單獨獲取單一使用或商業用途的授權。 要使任何解決方案與 Office 應用程式配合使用,必須在運行解決方案的機器上安裝和授權 Microsoft Office 應用程式。 該 DLL 始終會存在於安裝了 Office 應用程式的機器上,並且會在那裡註冊。 同時,主要互操作程序集(PIAs)使用“interop”的 .NET 解決方案所需的內容也會安裝在 GAC 中。
摘要
讀取和創建 Excel (XLS、XLSX 和 CSV)使用 Iron Software 的 IronXL 軟體庫輕鬆處理 C# 和所有其他 .NET 語言中的文件。 IronXL 不需要在您的服務器上安裝 Excel 或 Interop。IronXL 提供了比 Microsoft.Office.Interop.Excel 更快、更直觀的 API。 IronXL 適用於 .NET Core 2、Framework 4.5、Azure、Mono、Mobile 和 Xamarin。
Microsoft Office 互操作性(Excel 自動化)是創建/讀取 Excel 文件時的一個選項(XLS, XLSX, CSV)來自 C# 或 VB.NET 應用程式。 它要求所有客戶端機器都安裝相同版本的 Microsoft Excel,而且僅適用於 Windows 操作系統。
結論
在這裡,IronXL 相較於 Microsoft.Office.Interop.Excel 具有明顯的優勢,因為它不需要在本地或伺服器機器上安裝 Microsoft Office Excel 應用程式即可運作。 此外,在使用 Excel 自動化時,Microsoft Excel 在背景中加載,使用了大量的 MB,並與 IronXL 相比加載了大量的文件和 DLL。 IronXL擁有比Microsoft.Office.Interop.Excel更快速且直觀的API。
Microsoft Office 應用程式(包括 Excel)被設計為 UI 應用程式,因此 API 非常緩慢。 Microsoft 不建議使用 Excel 自動化(或任何 Office 互操作)在伺服器上。 在這種情況下,憑藉其強大的功能,IronXL 是整合到軟體應用程式中的最佳選擇。