目录
- 常用Excel导出方式
- 1.使用 Microsoft Office Interop Excel 组件导出 Excel 文件
- 2.使用 NPOI 组件导出 Excel 文件
- 3.使用 EPPlus 组件导出Excel文件
- 4. 使用 ClosedXML 组件导出 Excel 文件
- 总结
常用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。
1.使用 Microsoft Office Interop Excel 组件导出 Excel 文件
使用 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 应用程序对象,并释放了它们的资源。
2.使用 NPOI 组件导出 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
类。
3.使用 EPPlus 组件导出Excel文件
使用 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()
方法释放工作簿对象的资源。
4. 使用 ClosedXML 组件导出 Excel 文件
使用 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()
方法释放工作簿对象的资源。