目录
常用Excel导出方式
1.使用 Microsoft Office Interop Excel 组件导出 Excel 文件
2.使用 NPOI 组件导出 Excel 文件
3.使用 EPPlus 组件导出Excel文件
4. 使用 ClosedXML 组件导出 Excel 文件
在 C# 中,常用的Excel 文件导出 方式包括:
使用 Microsoft Office Interop Excel 组件:这是一种使用 Microsoft Excel 应用程序对象模型来创建和编辑 Excel 文件的方式。它提供了强大的功能,但需要安装 Microsoft Excel 或者 Microsoft Office 套件。
使用 NPOI 组件:NPOI 是一个 C#/.NET 平台上的开源组件,它可以读写 Microsoft Office 格式的文档,包括 Excel、Word 和 PowerPoint 等。相比于 Interop Excel 组件,NPOI 更加轻量级,不需要依赖于 Microsoft Excel 应用程序。
使用 EPPlus 组件:EPPlus 是一个免费的开源组件,它可以创建和读取 Excel 文件。它提供了一些方便的方法,如对单元格格式、图表、公式等进行操作。EPPlus 支持 .NET Framework 3.5 及更高版本,并不需要依赖于 Microsoft Excel 应用程序。
使用 ClosedXML 组件:ClosedXML 是一个简单易用的开源组件,它可以读取、创建和修改 Excel 文件。与 EPPlus 类似,它也提供了一些方便的方法来操纵 Excel 文件。ClosedXML 支持 .NET Framework 4.0 及更高版本。
以上是常用的几种 C# 导出 Excel 文件的方式,每种方式都有其特点和优缺点,选择适合自己需求的方式进行开发即可。以下针对每种导出方式,罗列了具体步骤以及Demo。
使用 Microsoft Office Interop Excel 组件导出 Excel 文件的步骤如下:
引用 Microsoft.Office.Interop.Excel 命名空间:在项目中添加对 Microsoft.Office.Interop.Excel 的引用,或者使用 NuGet 包管理器安装它。
创建 Excel 应用程序对象:使用 Application
类创建一个 Excel 应用程序对象。
创建工作簿对象:使用 Application.Workbooks.Add()
方法创建一个新的工作簿对象。
获取工作表对象:使用 Workbook.Worksheets
属性获取工作表集合,并使用索引或名称获取工作表对象。
向单元格写入数据:使用 Worksheet.Cells
属性获取单元格对象,并使用 Range.Value
属性或 Range.Formula
属性向单元格写入数据。
保存 Excel 文件:使用 Workbook.SaveAs()
方法将 Excel 文件保存到磁盘。
关闭 Excel 应用程序和工作簿对象:使用 Workbook.Close()
方法关闭工作簿对象,并使用 Application.Quit()
方法关闭 Excel 应用程序对象。
释放资源:使用 Marshal.ReleaseComObject()
方法释放 Excel 应用程序对象和工作簿对象的资源。
下面是一个示例代码,演示如何使用 Microsoft Office Interop Excel 组件导出 Excel 文件:
using System;
using System.Data;
using System.IO;
using Microsoft.Office.Interop.Excel;namespace ExportExcelDemo
{
class Program
{
static void Main(string[] args)
{
// 创建一个 DataTable 对象来存储数据
DataTable dataTable = new DataTable("MyData");// 添加列到 DataTable
dataTable.Columns.Add("Name", typeof(string));
dataTable.Columns.Add("Age", typeof(int));// 向 DataTable 中添加数据行
dataTable.Rows.Add("John Doe", 30);
dataTable.Rows.Add("Jane Smith", 25);// 使用 Microsoft Office Interop Excel 组件导出 Excel 文件
Application excelApp = new Application();
Workbook workbook = excelApp.Workbooks.Add();
Worksheet worksheet = (Worksheet)workbook.Worksheets[1];
int row = 1;
foreach (DataRow dataRow in dataTable.Rows)
{
worksheet.Cells[row, 1] = dataRow["Name"].ToString();
worksheet.Cells[row, 2] = dataRow["Age"];
row++;
}// 将 Excel 文件保存到磁盘
string fileName = @"C:\temp\MyExcelFile.xlsx";
workbook.SaveAs(fileName);// 关闭 Excel 应用程序和工作簿对象,并释放资源
workbook.Close();
excelApp.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(worksheet);
System.Runtime.InteropServices.Marshal.ReleaseComObject(workbook);
System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApp);
}
}
}
在这个示例代码中,我们使用 Application
类创建了一个 Excel 应用程序对象,并使用它来创建了一个新的工作簿对象。然后,我们使用 Workbook.Worksheets
属性获取工作表集合,并使用索引获取了第一个工作表对象。接下来,我们使用 Worksheet.Cells
属性获取单元格对象,并使用 Range.Value
属性或 Range.Formula
属性向单元格写入数据。最后,我们使用 Workbook.SaveAs()
方法将 Excel 文件保存到磁盘,关闭了工作簿对象和 Excel 应用程序对象,并释放了它们的资源。
使用 NPOI 组件导出 Excel 文件的步骤如下:
引用 NPOI 命名空间:在项目中添加对 NPOI 的引用,或者使用 NuGet 包管理器安装它。
创建工作簿对象:使用 HSSFWorkbook
或 XSSFWorkbook
类创建一个新的工作簿对象,分别对应于 Excel 的 .xls 和 .xlsx 格式。
获取工作表对象:使用 CreateSheet()
方法创建一个新的工作表对象,并设置工作表名称。
设置单元格样式:可以使用 CellStyle
类和 Font
类来设置单元格样式。
向单元格写入数据:使用 CreateRow()
方法创建一个新的行对象,使用 CreateCell()
方法创建一个新的单元格对象,并使用 SetValue()
方法向单元格写入数据。
保存 Excel 文件:使用 FileStream
类将 Excel 文件保存到磁盘。
释放资源:使用 Dispose()
方法释放工作簿对象和 FileStream 对象的资源。
下面是一个示例代码,演示如何使用 NPOI 组件导出 Excel 文件:
using System;
using System.Data;
using System.IO;
using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;namespace ExportExcelDemo
{
class Program
{
static void Main(string[] args)
{
// 创建一个 DataTable 对象来存储数据
DataTable dataTable = new DataTable("MyData");// 添加列到 DataTable
dataTable.Columns.Add("Name", typeof(string));
dataTable.Columns.Add("Age", typeof(int));// 向 DataTable 中添加数据行
dataTable.Rows.Add("John Doe", 30);
dataTable.Rows.Add("Jane Smith", 25);// 使用 NPOI 组件导出 Excel 文件
IWorkbook workbook = new HSSFWorkbook();
ISheet worksheet = workbook.CreateSheet("MySheet");
int row = 0;
foreach (DataRow dataRow in dataTable.Rows)
{
IRow newRow = worksheet.CreateRow(row);
newRow.CreateCell(0).SetCellValue(dataRow["Name"].ToString());
newRow.CreateCell(1).SetCellValue(Convert.ToInt32(dataRow["Age"]));
row++;
}// 将 Excel 文件保存到磁盘
string fileName = @"C:\temp\MyExcelFile.xls";
using (FileStream fs = new FileStream(fileName, FileMode.Create, FileAccess.Write))
{
workbook.Write(fs);
}// 释放资源
workbook.Dispose();
}
}
}
在这个示例代码中,我们使用 HSSFWorkbook
类创建了一个新的工作簿对象,并使用它来创建了一个名为 "MySheet" 的工作表对象。然后,我们使用 CreateRow()
方法和 CreateCell()
方法创建了新的行对象和单元格对象,并使用 SetValue()
方法向单元格写入数据。最后,我们使用 FileStream
类将 Excel 文件保存到磁盘,并使用 Dispose()
方法释放工作簿对象的资源。如果需要生成 .xlsx 格式的文件,可以使用 XSSFWorkbook
类代替 HSSFWorkbook
类。
使用 EPPlus 组件导出 Excel 文件的步骤如下:
引用 EPPlus 命名空间:在项目中添加对 EPPlus 的引用,或者使用 NuGet 包管理器安装它。
创建工作簿对象:使用 ExcelPackage
类创建一个新的工作簿对象。
获取工作表对象:使用 Workbook.Worksheets.Add()
方法创建一个新的工作表对象,并设置工作表名称。
设置单元格样式:可以使用 ExcelRange.Style
属性来设置单元格样式。
向单元格写入数据:使用 SetValue()
方法向单元格写入数据。
保存 Excel 文件:使用 ExcelPackage.SaveAs()
方法将 Excel 文件保存到磁盘。
释放资源:使用 Dispose()
方法释放工作簿对象的资源。
下面是一个示例代码,演示如何使用 EPPlus 组件导出 Excel 文件:
using System;
using System.Data;
using System.IO;
using OfficeOpenXml;namespace ExportExcelDemo
{
class Program
{
static void Main(string[] args)
{
// 创建一个 DataTable 对象来存储数据
DataTable dataTable = new DataTable("MyData");// 添加列到 DataTable
dataTable.Columns.Add("Name", typeof(string));
dataTable.Columns.Add("Age", typeof(int));// 向 DataTable 中添加数据行
dataTable.Rows.Add("John Doe", 30);
dataTable.Rows.Add("Jane Smith", 25);// 使用 EPPlus 组件导出 Excel 文件
using (ExcelPackage excelPackage = new ExcelPackage())
{
ExcelWorksheet worksheet = excelPackage.Workbook.Worksheets.Add("MySheet");
int row = 1;
foreach (DataRow dataRow in dataTable.Rows)
{
worksheet.Cells[row, 1].Value = dataRow["Name"].ToString();
worksheet.Cells[row, 2].Value = Convert.ToInt32(dataRow["Age"]);
row++;
}// 将 Excel 文件保存到磁盘
string fileName = @"C:\temp\MyExcelFile.xlsx";
FileInfo fileInfo = new FileInfo(fileName);
excelPackage.SaveAs(fileInfo);
}// 释放资源
}
}
}
在这个示例代码中,我们使用 ExcelPackage
类创建了一个新的工作簿对象,并使用它来创建了一个名为 "MySheet" 的工作表对象。然后,我们使用 Cells
属性获取单元格对象,并使用 SetValue()
方法向单元格写入数据。最后,我们使用 ExcelPackage.SaveAs()
方法将 Excel 文件保存到磁盘,并使用 Dispose()
方法释放工作簿对象的资源。
使用 ClosedXML 组件导出 Excel 文件的步骤如下:
引用 ClosedXML 命名空间:在项目中添加对 ClosedXML 的引用,或者使用 NuGet 包管理器安装它。
创建工作簿对象:使用 XLWorkbook
类创建一个新的工作簿对象。
获取工作表对象:使用 AddWorksheet()
方法创建一个新的工作表对象,并设置工作表名称。
设置单元格样式:可以使用 IXLStyle
接口和 IXLFont
接口来设置单元格样式。
向单元格写入数据:使用 SetValue()
方法向单元格写入数据。
保存 Excel 文件:使用 SaveAs()
方法将 Excel 文件保存到磁盘。
释放资源:使用 Dispose()
方法释放工作簿对象的资源。
下面是一个示例代码,演示如何使用 ClosedXML 组件导出 Excel 文件:
using System;
using System.Data;
using System.IO;
using ClosedXML.Excel;namespace ExportExcelDemo
{
class Program
{
static void Main(string[] args)
{
// 创建一个 DataTable 对象来存储数据
DataTable dataTable = new DataTable("MyData");// 添加列到 DataTable
dataTable.Columns.Add("Name", typeof(string));
dataTable.Columns.Add("Age", typeof(int));// 向 DataTable 中添加数据行
dataTable.Rows.Add("John Doe", 30);
dataTable.Rows.Add("Jane Smith", 25);// 使用 ClosedXML 组件导出 Excel 文件
using (XLWorkbook workbook = new XLWorkbook())
{
IXLWorksheet worksheet = workbook.AddWorksheet("MySheet");
int row = 1;
foreach (DataRow dataRow in dataTable.Rows)
{
worksheet.Cell(row, 1).Value = dataRow["Name"].ToString();
worksheet.Cell(row, 2).Value = Convert.ToInt32(dataRow["Age"]);// 设置单元格样式
worksheet.Cell(row, 2).Style.Font.Bold = true;
worksheet.Cell(row, 2).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right;row++;
}// 将 Excel 文件保存到磁盘
string fileName = @"C:\temp\MyExcelFile.xlsx";
workbook.SaveAs(fileName);
}// 释放资源
}
}
}
在这个示例代码中,我们使用 XLWorkbook
类创建了一个新的工作簿对象,并使用它来创建了一个名为 "MySheet" 的工作表对象。然后,我们使用 Cell()
方法获取单元格对象,并使用 SetValue()
方法向单元格写入数据。接着,我们使用 IXLStyle
接口和 IXLFont
接口来设置单元格样式。最后,我们使用 SaveAs()
方法将 Excel 文件保存到磁盘,并使用 Dispose()
方法释放工作簿对象的资源。