C# Excel 互操作解决方案

This article was translated from English: Does it need improvement?
Translated
View the article in English

许多项目使用Excel来进行清晰的沟通,但如果您正在使用Microsoft.Office.Interop.Excel,那么您可能不得不面对许多复杂的代码行。 在本教程中,我们将使用IronXL作为C# Excel Interop的替代方案,这样您就无需使用Interop即可完成您的项目。 您可以使用C#编程来使用Excel文件数据、创建Excel文件以及编辑和操作这些文件。


如何交替使用 Excel 互操作

  1. 安装一个Excel库来处理Excel文件。

  2. 打开Workbook并添加当前的Excel文件。

  3. 设置默认工作表。

  4. 从Excel工作簿中读取值。

  5. 处理并显示数值。

    步骤 1

1. 下载 IronXL 库

下载 IronXL 资料库使用 NuGet 安装访问免费库,然后一步一步地学习本教程,了解如何在不使用 Interop 的情况下使用 Excel。如果您想启动自己的项目,可获得许可证。

Install-Package IronXL.Excel

教程

2. 访问 Excel 文件数据

为了开发商业应用程序,我们需要轻松且完美地从Excel文件中访问数据,并能够根据各种要求以编程方式操作它们。 使用 IronXL,您可以通过 WorkBook.Load 方法从 Excel 文件中加载数据。()函数,用于授予访问特定Excel文件的权限。

在访问WorkBook之后,您可以使用`WorkBook.GetWorkSheet()功能。 现在您已经可以访问所有Excel文件数据了。 请参考下面的示例,了解我们如何在C#项目中使用这些函数来获取Excel文件数据。

/**
Access File Data
anchor-access-excel-file-data
**/
using IronXL;
static void Main(string [] args)
{
    //Access Excel file
    WorkBook wb = WorkBook.Load("sample.xlsx");
    //Access WorkSheet of Excel file
    WorkSheet ws = wb.GetWorkSheet("Sheet1");
    //get specific cell value
    string a = ws ["A5"].Value.ToString();
    Console.WriteLine(" Getting Single Value:\n\n   Value of Cell A5: {0} ",a);
    Console.WriteLine("\n Getting Many Cells Value using Loop:\n");
    //get many cell values using range function
    foreach (var cell in ws ["B2:B10"])
    {
        Console.WriteLine("   Value is: {0}", cell.Text);
    }
    Console.ReadKey();
}
/**
Access File Data
anchor-access-excel-file-data
**/
using IronXL;
static void Main(string [] args)
{
    //Access Excel file
    WorkBook wb = WorkBook.Load("sample.xlsx");
    //Access WorkSheet of Excel file
    WorkSheet ws = wb.GetWorkSheet("Sheet1");
    //get specific cell value
    string a = ws ["A5"].Value.ToString();
    Console.WriteLine(" Getting Single Value:\n\n   Value of Cell A5: {0} ",a);
    Console.WriteLine("\n Getting Many Cells Value using Loop:\n");
    //get many cell values using range function
    foreach (var cell in ws ["B2:B10"])
    {
        Console.WriteLine("   Value is: {0}", cell.Text);
    }
    Console.ReadKey();
}
'''
'''Access File Data
'''anchor-access-excel-file-data
'''*
Imports Microsoft.VisualBasic
Imports IronXL
Shared Sub Main(ByVal args() As String)
	'Access Excel file
	Dim wb As WorkBook = WorkBook.Load("sample.xlsx")
	'Access WorkSheet of Excel file
	Dim ws As WorkSheet = wb.GetWorkSheet("Sheet1")
	'get specific cell value
	Dim a As String = ws ("A5").Value.ToString()
	Console.WriteLine(" Getting Single Value:" & vbLf & vbLf & "   Value of Cell A5: {0} ",a)
	Console.WriteLine(vbLf & " Getting Many Cells Value using Loop:" & vbLf)
	'get many cell values using range function
	For Each cell In ws ("B2:B10")
		Console.WriteLine("   Value is: {0}", cell.Text)
	Next cell
	Console.ReadKey()
End Sub
VB   C#

这段代码将产生以下结果:

1output related to 2. 访问 Excel 文件数据

Excel 文件看起来是这样的

1excel related to 2. 访问 Excel 文件数据

我们可以看到,我们的 Excel 文件 sample.xlsx 中的 A5 单元格包含 小型企业。 从B2B10的其他值是相同的,并显示在输出中。

数据集和数据表

我们还可以使用这些指南处理Excel文件作为数据集和数据表。

/**
DataSet and DataTables
anchor-dataset-and-datatables
**/
//Access WorkBook.          
WorkBook wb = WorkBook.Load("sample.xlsx");
//Access WorkSheet.
 WorkSheet ws = wb.GetWorkSheet("Sheet1");
//Behave with a workbook as Dataset.
DataSet ds = wb.ToDataSet(); 
//Behave with workbook as DataTable
DataTable dt = ws.ToDataTable(true);
/**
DataSet and DataTables
anchor-dataset-and-datatables
**/
//Access WorkBook.          
WorkBook wb = WorkBook.Load("sample.xlsx");
//Access WorkSheet.
 WorkSheet ws = wb.GetWorkSheet("Sheet1");
//Behave with a workbook as Dataset.
DataSet ds = wb.ToDataSet(); 
//Behave with workbook as DataTable
DataTable dt = ws.ToDataTable(true);
'''
'''DataSet and DataTables
'''anchor-dataset-and-datatables
'''*
'Access WorkBook.          
Dim wb As WorkBook = WorkBook.Load("sample.xlsx")
'Access WorkSheet.
 Dim ws As WorkSheet = wb.GetWorkSheet("Sheet1")
'Behave with a workbook as Dataset.
Dim ds As DataSet = wb.ToDataSet()
'Behave with workbook as DataTable
Dim dt As DataTable = ws.ToDataTable(True)
VB   C#

您可以阅读更多关于如何与Excel 数据集和数据表,为该过程提供了更多代码示例和解释。

现在,我们将看到另一个方面,即在我们的C#项目中创建新的Excel文件。


3. 创建新的 Excel 文件

我们可以在CSharp项目中轻松地以编程方式创建一个新的Excel电子表格并在其中插入数据。 为了实现这一点,IronXL 提供了 WorkBook.Create 方法。()`函数,用于创建一个新的Excel文件。

我们可以使用WorkBook.CreateWorkSheet根据需要创建任意数量的工作表。()功能。

之后,我们还可以如下示例所示插入数据:

/**
Create New Excel 
anchor-create-new-excel-file
**/
using IronXL;
static void Main(string [] args)
{
    //create new WorkBook
    WorkBook wb = WorkBook.Create();
    //Create new WorkSheet in wb
    WorkSheet ws = wb.CreateWorkSheet("sheet1");
    //Insert Data 
    ws ["A1"].Value = "New Value A1";
    ws ["B2"].Value = "New Value B2";
    //Save newly created Excel file
    wb.SaveAs("NewExcelFile.xlsx");
}
/**
Create New Excel 
anchor-create-new-excel-file
**/
using IronXL;
static void Main(string [] args)
{
    //create new WorkBook
    WorkBook wb = WorkBook.Create();
    //Create new WorkSheet in wb
    WorkSheet ws = wb.CreateWorkSheet("sheet1");
    //Insert Data 
    ws ["A1"].Value = "New Value A1";
    ws ["B2"].Value = "New Value B2";
    //Save newly created Excel file
    wb.SaveAs("NewExcelFile.xlsx");
}
'''
'''Create New Excel 
'''anchor-create-new-excel-file
'''*
Imports IronXL
Shared Sub Main(ByVal args() As String)
	'create new WorkBook
	Dim wb As WorkBook = WorkBook.Create()
	'Create new WorkSheet in wb
	Dim ws As WorkSheet = wb.CreateWorkSheet("sheet1")
	'Insert Data 
	ws ("A1").Value = "New Value A1"
	ws ("B2").Value = "New Value B2"
	'Save newly created Excel file
	wb.SaveAs("NewExcelFile.xlsx")
End Sub
VB   C#

上述代码将创建一个名为NewExcelFile.xlsx的新Excel文件,并在单元格地址A1B1中插入新数据,值分别为New Value A1New Value B2。 通过这种设置,您可以根据需要插入同样的数据。 注意:如果您要创建一个新的 Excel 文件或修改现有文件,请不要忘记保存文件,如上例所示。 深入探讨如何使用 C# 创建新的 Excel 电子表格并在您的项目中试用代码。


4. 修改现有的Excel文件

我们可以以编程方式修改现有的Excel文件,并在其中插入更新的数据。 在修改 Excel 文件时,我们将看到以下几个方面:

  • 更新单元格的值
  • 用新值替换旧值
  • 删除行或列

    让我们看看如何在我们的CSharp项目中实现上述主题。

更新单元格值

更新现有Excel电子表格的单元格值非常简单。 只需在项目中访问 Excel 文件并指定其工作表,然后按照下面的示例更新数据:

/**
Update Cell Value
anchor-update-cell-value
**/
using IronXL;
static void Main(string [] args)
{
    WorkBook wb = WorkBook.Load("sample.xlsx");
    WorkSheet ws = wb.GetWorkSheet("Sheet1");
    //update A3 value
    ws ["A3"].Value = "New Value of A3";
    wb.SaveAs("sample.xlsx");
}
/**
Update Cell Value
anchor-update-cell-value
**/
using IronXL;
static void Main(string [] args)
{
    WorkBook wb = WorkBook.Load("sample.xlsx");
    WorkSheet ws = wb.GetWorkSheet("Sheet1");
    //update A3 value
    ws ["A3"].Value = "New Value of A3";
    wb.SaveAs("sample.xlsx");
}
'''
'''Update Cell Value
'''anchor-update-cell-value
'''*
Imports IronXL
Shared Sub Main(ByVal args() As String)
	Dim wb As WorkBook = WorkBook.Load("sample.xlsx")
	Dim ws As WorkSheet = wb.GetWorkSheet("Sheet1")
	'update A3 value
	ws ("A3").Value = "New Value of A3"
	wb.SaveAs("sample.xlsx")
End Sub
VB   C#

上述代码将使用New Value of A3更新单元格A3的值。

我们还可以使用 range 函数将多个单元格更新为静态值:

 ws ["A3:C3"].Value = "New Value";
 ws ["A3:C3"].Value = "New Value";
ws ("A3:C3").Value = "New Value"
VB   C#

这将更新Excel文件中从A3C3单元格的第3行数据为New Value

了解更多关于使用的信息C# 中的范围函数请举例说明。

替换单元格值

IronXL的美在于,我们可以轻松地在现有Excel文件中将old values替换为new values,并涵盖以下所有方面:

  • 替换整个工作表的值:
 WorkSheet.Replace("old value", "new value");
 WorkSheet.Replace("old value", "new value");
WorkSheet.Replace("old value", "new value")
VB   C#
  • 替换特定行的值:
WorkSheet.Rows [RowIndex].Replace("old value", "new value");
WorkSheet.Rows [RowIndex].Replace("old value", "new value");
WorkSheet.Rows (RowIndex).Replace("old value", "new value")
VB   C#
  • 替换特定列的值:
WorkSheet.Columns [ColumnIndex].Replace("old value", "new Value")
WorkSheet.Columns [ColumnIndex].Replace("old value", "new Value")
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'WorkSheet.Columns [ColumnIndex].Replace("old value", "new Value")
VB   C#
  • 替换特定范围内的值:
WorkSheet ["From:To"].Replace("old value", "new value");
WorkSheet ["From:To"].Replace("old value", "new value");
WorkSheet ("From:To").Replace("old value", "new value")
VB   C#

让我们看一个例子,清楚地了解如何在我们的CSharp项目中使用上述功能来替换值。 为此,我们将使用 replace 函数来替换特定范围内的值。

/**
Replace Cell Value Range
anchor-replace-cell-values
**/
using IronXL;
static void Main(string [] args)
{
    WorkBook wb = WorkBook.Load("sample.xlsx");
    WorkSheet ws = wb.GetWorkSheet("Sheet1");
    //Specifying Range from B5 to G5
    ws ["B5:G5"].Replace("Normal", "Good");
    wb.SaveAs("sample.xlsx");
}
/**
Replace Cell Value Range
anchor-replace-cell-values
**/
using IronXL;
static void Main(string [] args)
{
    WorkBook wb = WorkBook.Load("sample.xlsx");
    WorkSheet ws = wb.GetWorkSheet("Sheet1");
    //Specifying Range from B5 to G5
    ws ["B5:G5"].Replace("Normal", "Good");
    wb.SaveAs("sample.xlsx");
}
'''
'''Replace Cell Value Range
'''anchor-replace-cell-values
'''*
Imports IronXL
Shared Sub Main(ByVal args() As String)
	Dim wb As WorkBook = WorkBook.Load("sample.xlsx")
	Dim ws As WorkSheet = wb.GetWorkSheet("Sheet1")
	'Specifying Range from B5 to G5
	ws ("B5:G5").Replace("Normal", "Good")
	wb.SaveAs("sample.xlsx")
End Sub
VB   C#

上述代码将把从 B5G5Normal 值替换为 Good,工作表的其他部分保持不变。 了解更多关于如何编辑 Excel 单元格区域中的值并使用 IronXL 的这一功能。

删除 Excel 文件的行

在应用程序开发中,我们有时需要以编程方式删除现有Excel文件的整行。 为了完成这项任务,我们使用 RemoveRow 方法。()IronXL 的功能。 这里有一个例子:

/**
Remove Row
anchor-remove-rows-of-excel-file
**/
using IronXL;
static void Main(string [] args)
{ 
    WorkBook wb = WorkBook.Load("sample.xlsx");
    WorkSheet ws = wb.GetWorkSheet("Sheet1");
    //Remove the row number 2
    ws.Rows [2].RemoveRow();
    wb.SaveAs("sample.xlsx");
}
/**
Remove Row
anchor-remove-rows-of-excel-file
**/
using IronXL;
static void Main(string [] args)
{ 
    WorkBook wb = WorkBook.Load("sample.xlsx");
    WorkSheet ws = wb.GetWorkSheet("Sheet1");
    //Remove the row number 2
    ws.Rows [2].RemoveRow();
    wb.SaveAs("sample.xlsx");
}
'''
'''Remove Row
'''anchor-remove-rows-of-excel-file
'''*
Imports IronXL
Shared Sub Main(ByVal args() As String)
	Dim wb As WorkBook = WorkBook.Load("sample.xlsx")
	Dim ws As WorkSheet = wb.GetWorkSheet("Sheet1")
	'Remove the row number 2
	ws.Rows (2).RemoveRow()
	wb.SaveAs("sample.xlsx")
End Sub
VB   C#

上述代码将删除 sample.xlsx 中的第 2 行。


教程快速访问

IronXL 参考资料

阅读《IronXL 应用程序接口参考》,进一步了解所有功能、特性、类和命名空间。

IronXL 参考资料
Documentation related to 教程快速访问