
IronXL 和 Microsoft Office Interop Excel 的比较
MS Office 工具(如 Word、Excel、PowerPoint 等)非常流行,广泛应用于各类企业。 以 Excel 文件格式创建报告文件是许多用户在其软件应用程序中需要的一项功能,现在有了一种明确的方法,可以利用现有的不同库将这一功能纳入软件应用程序中。
在本文中,我们将讨论和比较如何使用 IronXL 和 Microsoft Office Excel Interop 这两个最流行的库,在 C# 中以编程方式处理 Microsoft Excel 文件。
IronXL 和 Microsoft Excel Interop 都提供了在 .NET Framework 中创建、编辑和读取 Excel 文档的方法。 下一个问题是决定哪个C# Excel库最适合您的项目。 本文将帮助您为您的应用程序选择最佳选项。
让我们先看看这两个库都能提供什么,然后再进行比较。
IronXL库
IronXL for .NET 是一个.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是C#中领先的.NET核心和.NET框架Excel电子表格库。
文档与支持
- 在线 API 参考文档
- IronSoftware.com 上的实用入门片段和教程
- NuGet 软件包。
- GitHub repos 更多示例
- 由 Team Iron 提供支持
IronXL功能集
- 从 XLS/XLSX/CSV/TSV 加载、读取和编辑数据
- 保存和导出 - 至 XLS/XLSX/CSV/TSV/JSON
- System.Data 对象 - 将 Excel 电子表格作为 System.Data.DataSet 和 System.Data.DataTable 对象处理。
- 公式 —— 与Excel公式一起工作。 每次编辑工作表时公式都会重新计算。
- 范围 - 易于使用的工作表 ["A1:B10"] 语法。 直观地组合和创建范围。
- 排序 - 对范围、列和行进行排序。
- 样式 - 单元视觉样式、字体、大小、背景图案、边框、对齐方式和数字格式。
Microsoft Office Excel 互操作对象
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 对象的工作变得更加轻松。 新功能包括命名参数和可选参数、一种称为动态的新类型,以及将参数传递给 COM 方法中的引用参数(就像传递值参数一样)的功能。 这使它成为使用 COM 和 Interop 对象的更好选择。
注意:计算机上需要安装 Microsoft Excel Interop 对象。
文章的其余部分如下:
- 创建控制台应用程序
- 安装IronXL C#库 3.Microsoft Office Interop Excel 安装 4.创建新的 Excel 工作簿和工作表 5.阅读 Excel 文件 6.在 Excel 文件中处理数值范围 7.使用 Excel 公式
- 授权 9.摘要和结论
1. 创建控制台应用程序
使用以下步骤创建控制台应用程序:
- 启动Visual Studio 2022 IDE。
- 点击**"创建新项目"**。
- 在**"创建新项目"页面上,从下拉列表中选择C#、从平台列表中选择Windows**,并从**"项目类型"列表中选择控制台**。
- 从显示的项目模板中选择控制台应用程序(.NET Framework)。

- 点击下一步。
- 在附加信息屏幕中,指定您想使用的框架版本。 在本例中,我们将使用**.NET Framework 4.8**。

- 点击创建以完成该过程。
现在项目已创建,我们几乎准备好测试这些库了。 不过,我们仍需要将它们安装并集成到我们的项目中。 让我们先安装IronXL。
2. IronXL C# 库安装
您可以使用以下方法下载和安装IronXL库:
- 使用包含NuGet包的Visual Studio。
- 直接下载NuGet包。
- 使用DLL手动安装。
让我们仔细看一下每个方法。
2.1. 使用包含NuGet包的Visual Studio
Visual Studio 提供 NuGet 包管理器以便在您的项目中安装 NuGet 包。 您可以通过项目菜单或通过右键点击解决方案资源管理器中的项目访问它。

- 现在,从浏览选项卡 -> 搜索 IronXL.Excel -> 安装

- 我们完成了。

3.2. 使用NuGet包管理器控制台
下载和安装 Microsoft.Office.Interop.Excel C# 库的另一种方法是利用以下步骤,通过开发人员命令提示符安装 NuGet 软件包。
1.打开 Developer 命令提示符--通常可在 Visual Studio 文件夹中找到。 2.键入以下命令:
PM> Install-Package Microsoft.Office.Interop.Excel
3.按回车键。 4.这将下载并安装软件包。 5.重新加载您的 Visual Studio 项目并开始使用。
3.3.添加必要的使用指令
1.在解决方案资源管理器中,右键单击 Program.cs 文件,然后单击查看代码。 2.在代码文件顶部添加以下 using 指令:
using Excel = Microsoft.Office.Interop.Excel;Imports Excel = Microsoft.Office.Interop.Excel4.创建新的 Excel 工作簿和工作表
一个工作簿是一个包含多个行和列工作表的Excel文件。 两者均提供创建新的Excel工作簿和工作表的设施。 让我们一步步来看一下代码。
4.1.使用 IronXL.Excel 创建新的 Excel 工作簿和工作表
using IronXL.Excel 创建一个新的 Excel 工作簿再简单不过了! 只需一行代码! 是的,真的。 在Program.cs文件中的静态void Main函数中添加以下代码:
// Create a new workbook in XLSX format
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);' Create a new workbook in XLSX format
Dim workbook As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX)使用IronXL可以创建XLS(旧版Excel文件)和XLSX(当前和新版文件)两种文件格式。
而且,创建默认工作表更简单:
// Create a new worksheet
var worksheet = workbook.CreateWorkSheet("IronXL Features");' Create a new worksheet
Dim worksheet = workbook.CreateWorkSheet("IronXL Features")现在您可以使用工作表变量设置单元格值,并几乎可以做Excel文件能做的一切。
4.2.使用 Microsoft.Office.Interop.Excel 创建新的 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();
// Check 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()
' Check 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
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.Excel 比 Office Interop Excel 更具优势。 IronXL.Excel 只用一行代码就能处理 Excel 文件,没有任何繁琐和额外的依赖性。
5. 读取Excel文件
这两个库都可以打开和读取现有的Excel文档。 让我们看看示例代码。
5.1. 使用IronXL读取Excel文件
IronXL WorkBook类表示一个Excel sheet。 要使用C#打开Excel文件,我们使用WorkBook.Load并指定Excel文件(.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
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.
For Each cell In worksheet("A2:A10")
Console.WriteLine("Cell {0} has value '{1}'", cell.AddressString, cell.Text)
Next cell5.2.使用 Microsoft.Office.Interop.Excel 读取 Excel 文件
这也使用一行代码来打开工作簿和工作表。 代码如下
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 with two columns
for (int rowCount = 1; rowCount <= 10; rowCount++)
{
string firstValue = Convert.ToString((xlRange.Cells[rowCount, 1] as Excel.Range).Text);
string secondValue = Convert.ToString((xlRange.Cells[rowCount, 2] as Excel.Range).Text);
Console.WriteLine(firstValue + "\t" + secondValue);
}' Get the entire range of cells
Dim xlRange As Excel.Range = xlWorkSheet.UsedRange
' Reading first 10 rows with two columns
For rowCount As Integer = 1 To 10
Dim firstValue As String = Convert.ToString(CType(xlRange.Cells(rowCount, 1), Excel.Range).Text)
Dim secondValue As String = Convert.ToString(CType(xlRange.Cells(rowCount, 2), Excel.Range).Text)
Console.WriteLine(firstValue & vbTab & secondValue)
Next然而,检查 Excel 安装并创建其实例也是不可或缺的一部分。
6.在 Excel 文件中处理数值范围
6.1.使用 IronXL 处理数值范围
在 IronXL 中,只需一行代码,我们就可以获得特定单元格的取值范围。 然后,使用循环可以读取或编辑每个单元格的值。 代码如下
// Load the workbook and get the first worksheet
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);
}' Load the workbook and get the first worksheet
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)
Next6.2.使用 Microsoft.Office.Interop.Excel 处理数值范围
这也是使用一行代码来获取单元格值范围。 然后可以用所需的值更新单元格。 代码如下
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"7.使用 Excel 公式
Excel 公式是处理 Excel 文件的最重要部分。 这两个库都提供了处理公式并将其轻松应用到单元格中的功能。
7.1.使用 IronXL.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()您还可以检索公式及其值。
// 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()7.2.使用 Microsoft.Office.Interop.Excel 处理 Excel 公式
同样,在加载工作簿和工作表后,可以使用以下代码来处理 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
Dim range1 = xlWorkSheet.get_Range("A1", "D1")
Dim range2 = xlWorkSheet.get_Range("C2", "C6")
' Set Formula
range1.Formula = "=RAND()*100000"
range2.Formula = "=A2 & "" "" & B2"8. 许可证
IronXL是一个开放商业的C# Excel库。 它适用于开发,并始终可以为商业部署获得许可证。 许可可供单项目使用、单个开发者、代理机构和全球公司,以及SaaS和OEM再分发。 所有许可证包括30天退款保证、一年产品支持和更新,可用于开发/演示/生产环境,还提供永久许可(一次性购买)。 Lite软件包从$999开始。
对于 Microsoft Office Interop Excel,使用此 DLL 文件的应用程序无论是一次性使用还是商业用途,都不需要单独的许可证。 为了使任何解决方案都能与 Office 应用程序配合使用,必须在运行解决方案的计算机上安装 Microsoft Office 应用程序并获得许可。 DLL 将始终存在于安装 Office 应用程序的机器上,并在那里注册。 同时,使用 "互操作 "的 .NET 解决方案所需的主要互操作程序集 (PIA) 也将安装在 GAC 中。
9.总结和结论
摘要 using Iron Software 的 IronXL 软件库,用 C# 和所有其他 .NET 语言读取和创建 Excel(XLS、XLSX 和 CSV)文件变得非常容易。 IronXL 不需要在服务器或 Interop 上安装 Excel。IronXL 提供了比 Microsoft.Office.Interop.Excel更快、更直观的 API。 IronXL 适用于 .NET Core 2、Framework 4.5、Azure、Mono and、Mobile 和 Xamarin。
从 C# 或 VB.NET 应用程序创建/读取 Excel 文件(XLS、XLSX、CSV)时,可选择使用 Microsoft Office Interop(Excel 自动化)。 它要求所有客户机安装相同版本的 Microsoft Excel,并且只能在 Windows 操作系统上运行。
结论
在这方面,IronXL 与 Microsoft.Office.Interop.Excel 相比具有明显的优势,因为它不需要在本地或服务器机器上安装 Microsoft Office Excel 应用程序即可工作。 此外,在使用 Excel Automation 时,Microsoft Excel 会在后台加载,与 IronXL 相比,会占用大量 MB 空间并加载大量文件和 DLL。 IronXL 的 API 比 Microsoft.Office.Interop.Excel更快、更直观。
Microsoft Office 应用程序(包括 Excel)设计为 UI 应用程序,因此 API 运行速度非常慢。 Microsoft 不建议在服务器上使用 Excel Automation(或任何 Office Interop)。 在这种情况下,IronXL 凭借其强大的功能,成为集成到软件应用程序中的最佳选择。

Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。
相关文章



