在實際環境中測試
在生產環境中測試無浮水印。
在任何需要的地方都能運作。
MS Office工具如Word、Excel、PowerPoint等在各種企業中非常流行並被廣泛使用。許多用戶在其軟件應用程序中需要創建Excel文件格式的報告文件,現在有一種明確的方法可以使用不同的庫將此功能包含在軟件應用程序中。
在本文中,我們將討論並比較如何使用C#以編程方式處理Microsoft Excel文件,使用兩個最流行的庫,IronXL和Microsoft Office Excel Interop。
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, Mobile, Linux, macOS 和 Azure。
IronXL 是 C# 中領先的 .NET 核心和 .NET 框架 Excel 電子表格庫。
文檔與支援
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 和 Interop 物件的更好選擇。
注意:Microsoft Excel Interop 物件需要在電腦上安裝 Microsoft Excel
本文的其餘部分如下:
請使用以下步驟來建立一個控制台應用程式:
現在專案已建立,我們幾乎準備好測試庫了。然而,我們仍需安裝並將其整合到我們的專案中。讓我們先安裝 IronXL。
您可以使用以下方式下載並安裝 IronXL 資料庫:
讓我們仔細看看每一個方法。
Visual Studio 提供了 NuGet 套件管理器來安裝專案中的 NuGet 套件。您可以通過專案選單存取它,或者在方案總管中右鍵點擊您的專案來進行操作。
另一種下載和安裝 Microsoft.Office.Interop.Excel C# 函式庫的方法是使用開發命令提示字元安裝 NuGet 套件,步驟如下:
輸入以下命令:
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 創建一個 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 應用程式的機器上,並且會在該處註冊。同時,主要的 Interop 程式集 (PIAs) 使用“interop”的 .NET 解決方案所需的內容也會安裝在 GAC 中。
總結
讀取和創建 Excel (XLS、XLSX 和 CSV) 在 C# 和所有其他 .NET 語言中使用 Iron Software 的 IronXL 軟體庫處理文件非常簡單。IronXL 不需要在您的伺服器上安裝 Excel 或 Interop。IronXL 提供比 Microsoft.Office.Interop.Excel 更快速和直觀的 API。IronXL 適用於 .NET Core 2、Framework 4.5、Azure、Mono 和行動裝置及 Xamarin。
Microsoft Office Interop (Excel 自動化) 是創建/讀取 Excel 文件時的一個選項 (XLS, XLSX, CSV) 從 C# 或 VB.NET 應用程式。它要求所有客戶端機器安裝相同版本的 Microsoft Excel,並且僅在 Windows 作業系統上運行。
結論
在這裡,IronXL 相較於 Microsoft.Office.Interop.Excel 具有明顯的優勢,因為它不需要在本地或伺服器機器上安裝 Microsoft Office Excel 應用程式即可運行。此外,使用 Excel 自動化時,Microsoft Excel 在後台加載,使用大量 MB 並加載大量文件和 DLL,相比之下,IronXL 具有更快且更直覺的 API。
Microsoft Office 應用程式 (包括 Excel) 設計為 UI 應用程式,因此 API 非常慢。微軟不推薦使用 Excel 自動化 (或任何 Office 互操作) 在伺服器上。在這種情況下,憑藉其所有強大的功能,IronXL 是整合到軟體應用程式中的最佳選擇。