在实际环境中测试
在生产中测试无水印。
随时随地为您服务。
MS Office 工具,如 Word、Excel、PowerPoint 等,在所有类型的企业中都非常流行和广泛使用。以 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.NET Framework。
IronXL 是一个直观的 C# 应用程序接口,可让你在 .NET 中以快如闪电的性能读取、编辑和创建 Excel 电子表格文件。IronXL 完全支持 .NET Core、.NET Framework、Xamarin、Mobile、Linux、macOS 和 Azure。
IronXL 是一款领先的 .NET core 和 .NET framework Excel 电子表格库,适用于 C#。
文件与支持
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.摘要和结论
使用以下步骤创建控制台应用程序:
现在项目已创建,我们几乎可以测试库了。不过,我们仍需安装并将它们集成到项目中。让我们先安装 IronXL。
您可以使用以下方法下载和安装 IronXL 库:
1.使用 Visual Studio 和 NuGet 软件包。
2.直接下载 NuGet 包。
3.使用 DLL 手动安装。
让我们逐一详细了解。
Visual Studio 提供了 NuGet 包管理器,用于在项目中安装 NuGet 包。你可以通过 "项目菜单 "或右键单击 "解决方案资源管理器 "中的项目来访问它。
下载和安装 Microsoft.Office.Interop.Excel C# 库的另一种方法是使用以下步骤,通过开发人员命令提示符安装 NuGet 软件包。
键入以下命令
PM> Install-Package Microsoft.Office.Interop.Excel
.
1.在解决方案资源管理器中,右键单击 Program.cs 文件,然后单击查看代码。
2.在代码文件顶部添加以下 using 指令:
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 (当前和更新的文件版本) 文件格式。
而且,创建默认工作表更简单:
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")
每个工作簿可以有多个工作表对象。这些对象代表 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 语言创建 Excel 文件变得非常容易。IronXL 不需要在服务器或 Interop 上安装 Excel。IronXL 提供的 API 比 Microsoft.Office.Interop.Excel更快、更直观。IronXL 适用于 .NET Core 2、Framework 4.5、Azure、Mono、Mobile 和 Xamarin。
微软 Office 互操作 (Excel 自动化) 是创建/读取 Excel 文件时的一个选项 (XLS、XLSX、CSV) 在 C# 或 VB.NET 应用程序中使用。它要求所有客户机安装相同版本的 Microsoft Excel,而且只能在 Windows 操作系统上运行。
结论
与 Microsoft.Office.Interop.Excel 相比,IronXL 具有明显的优势,因为它无需在本地或服务器计算机上安装 Microsoft Office Excel 应用程序即可运行。此外,与 IronXL 相比,使用 Excel Automation 时,Microsoft Excel 会在后台加载,这会占用大量 MB 空间并加载大量文件和 DLL。与Microsoft.Office.Interop.Excel相比,IronXL拥有更快、更直观的应用程序接口。
微软 Office 应用程序 (包括 Excel) 设计为 UI 应用程序,因此 API 运行速度非常慢。微软不建议使用 Excel 自动化 (或任何 Office Interop) 在服务器上。在这种情况下,IronXL 凭借其强大的功能,成为集成到软件应用程序中的最佳选择。