与其他组件比较

IronXL与Microsoft Office Interop Excel的比较

发布 2022年三月28日
分享:

MS Office 工具,如 Word、Excel、PowerPoint 等,在所有类型的企业中都非常流行和广泛使用。 以 Excel 文件格式创建报告文件是许多用户在其软件应用程序中需要的一项功能,现在有了一种明确的方法,可以使用现有的不同库将这一功能纳入软件应用程序中。

在本文中,我们将讨论并比较如何使用 IronXL 和 Microsoft Office Excel Interop 这两个最流行的库,以编程方式在 C# 中处理 Microsoft Excel 文件。

IronXL 和 Microsoft Excel Interop 都提供了在 .NET Framework 中创建、编辑和读取 Excel 文档的方法。 下一个问题是决定 C# Excel 库 您的项目最需要的是.NET、Java、Python 或 Node js。 本文将帮助您为自己的应用程序选择最佳方案。

让我们先看看这两个图书馆都提供了什么,然后再进行比较。

IronXL 库

IronXL for .NET 是一个.NET 库,便于用 C# 阅读和编辑 Microsoft Excel 文档。 IronXL.Excel 是一个独立的 .NET 软件库,用于读取各种电子表格格式。 它不需要安装 Microsoft Excel,也不依赖于 Interop。

IronXL for .NET 是一个直观的 C# 应用程序接口,可让您在 .NET 中以快如闪电的性能读取、编辑和创建 Excel 电子表格文件。 IronXL完全支持.NET Core、.NET Framework、Xamarin、移动、Linux、macOS和Azure。

IronXL 是领先的 .NET core 和 .NET framework Excel 电子表格库,适用于 C#。

文档与支持

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 对象

文章的其余部分如下:

  1. 创建控制台应用程序

  2. IronXL C# 库安装

  3. Microsoft Office Interop Excel 安装

  4. 创建新的 Excel 工作簿和工作表

  5. 阅读 Excel 文件

  6. 在 Excel 文件中处理数值范围

  7. 使用 Excel 公式

  8. 许可

  9. 总结和结论

1.创建控制台应用程序

使用以下步骤创建一个控制台应用程序:

  • 启动 Visual Studio 2022 IDE。
  • 点击 "创建新项目 "
  • "创建新项目 "页面,在语言下拉列表中选择C#,在平台列表中选择Windows,在"项目类型 "列表中选择控制台
  • 选择 *控制台应用程序(.NET框架)从显示的项目模板中选择*。
    创建项目 - 控制台应用程序
  • 点击下一步
  • 在 "附加信息 "页面中,指定您希望使用的框架版本。 我们将在本例中使用 .NET Framework 4.8**。

    创建项目 - .NET Framework
  • 单击创建完成流程。

    现在项目已经创建,我们几乎可以测试库了。 不过,我们仍然需要安装并将它们集成到我们的项目中。 让我们先安装 IronXL。

2.IronXL C#库安装

您可以使用以下方法下载并安装 IronXL 库:

  1. 使用 Visual Studio 和 NuGet 软件包。

  2. 直接下载 NuGet 软件包。

  3. 使用 DLL 手动安装。

    让我们逐一进行详细了解。

2.1.使用 Visual Studio 和 NuGet 软件包

Visual Studio 提供了 NuGet 包管理器,用于在项目中安装 NuGet 包。 您可以通过项目菜单或右键单击解决方案资源管理器中的项目来访问它。

选择管理 NuGet 软件包
  • 现在,从浏览选项卡 -> 搜索 IronXL.Excel -> 安装

    搜索 IronXL
  • 我们就大功告成了。
    搜索 Microsoft Excel Interop

3.2.使用 NuGet 软件包管理器控制台

下载和安装 Microsoft.Office.Interop.Excel C# 库的另一种方法是利用以下步骤,通过开发人员命令提示符安装 NuGet 软件包。

  • 打开开发人员命令提示符--通常可在 Visual Studio 文件夹中找到。

    键入以下命令

    PM> Install-Package Microsoft.Office.Interop.Excel.

  • 按下回车键。
  • 这将下载并安装软件包。
  • 重新加载您的 Visual Studio 项目并开始使用。

3.3.添加必要的使用指令

  1. 在解决方案资源管理器中,右键单击 Program.cs 文件,然后单击查看代码。

  2. 在代码文件顶部添加以下 using 指令:
using Excel = Microsoft.Office.Interop.Excel;
using Excel = Microsoft.Office.Interop.Excel;
Imports Excel = Microsoft.Office.Interop.Excel
VB   C#

4.创建新的 Excel 工作簿和工作表

工作簿是一个 Excel 文件,包含多个有行和列的工作表。 这两个库都提供了创建新 Excel 工作簿和工作表的功能。 让我们一步步来看看代码。

4.1.使用 IronXL.Excel 新建 Excel 工作簿和工作表

使用 IronXL.Excel 创建新 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)
VB   C#

两种 XLS(旧版 Excel 文件)和 XLSX(当前和更新的文件版本)文件格式。

而且,创建默认工作表更简单:

var worksheet = workbook.CreateWorkSheet("IronXL Features");
var worksheet = workbook.CreateWorkSheet("IronXL Features");
Dim worksheet = workbook.CreateWorkSheet("IronXL Features")
VB   C#

现在,您可以使用工作表变量来设置单元格值,几乎可以做 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();  

//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
VB   C#

创建工作簿和工作表:

//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)
VB   C#

目前,从两份代码来看,IronXL.Excel 比 Office Interop Excel 更具优势。 IronXL.Excel 只用一行代码就能处理 Excel 文件,没有任何繁琐和额外的依赖性。

5.阅读 Excel 文件

两个库都可以打开和读取现有的 Excel 文档。 让我们来看看示例代码。

5.1.使用 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")
VB   C#

每个工作簿可以有多个工作表对象。 这些代表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")
VB   C#

读取单元格值的代码:

// 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
VB   C#

5.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);
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)
VB   C#

读取单元格值的代码:

//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
VB   C#

不过,检查 Excel 安装情况并创建其实例是不可或缺的一部分。

6.在 Excel 文件中处理数值范围

6.1.使用 IronXL 处理数值范围

在 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
VB   C#

6.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";
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"
VB   C#

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();
' 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()
VB   C#

您还可以检索公式及其值。

// 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()
VB   C#

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
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"
VB   C#

8.许可

IronXL 是一个公开商业化的 C# Excel 库。 它可免费用于开发,也可随时授权用于商业部署。 提供许可证 适用于单个项目使用、单个开发人员、机构和跨国公司,以及 SaaS 和 OEM 再分发。 所有许可证均包含 30 天退款保证、一年的产品支持和更新、开发/分期/生产有效期以及永久许可证。(一次性购买). 精简版软件包从 $749 开始。

对于 Microsoft Office Interop Excel,使用此 DLL 文件的应用程序无论是一次性使用还是商业用途,都不需要单独的许可证。 为了使任何解决方案都能与 Office 应用程序配合使用,必须在运行解决方案的计算机上安装 Microsoft Office 应用程序并获得许可。 DLL 将始终存在于安装 Office 应用程序的机器上,并在那里注册。 同时,主要的互操作组件(PIAs)使用 "interop "的.NET 解决方案所需的所有组件也将安装在 GAC 中。

9.总结和结论

摘要

读取和创建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 and、Mobile 和 Xamarin。

微软 Office Interop(Excel 自动化)是创建/读取 Excel 文件时的一个选项(XLS、XLSX、CSV)译文必须来自 C# 或 VB.NET 应用程序。 它要求所有客户机安装相同版本的 Microsoft Excel,并且只能在 Windows 操作系统上运行。

结论

在这方面,IronXL 与 Microsoft.Office.Interop.Excel 相比具有明显的优势,因为它不需要在本地或服务器机器上安装 Microsoft Office Excel 应用程序即可工作。 此外,在使用 Excel Automation 时,Microsoft Excel 会在后台加载,与 IronXL 相比,会占用大量 MB 空间并加载大量文件和 DLL。 IronXL 的 API 比 Microsoft.Office.Interop.Excel更快、更直观。

微软办公应用程序(包括 Excel)这些开发工具被设计为 UI 应用程序,因此 API 运行速度非常慢。 微软不建议使用 Excel Automation(或任何 Office Interop)在服务器上。 在这种情况下,IronXL 凭借其强大的功能,成为集成到软件应用程序中的最佳选择。

< 前一页
IronXL与Epplus的比较
下一步 >
IronXL与Aspose Cells的比较