C#导出Excel的几种常见方式及详细实现步骤

来自:网络
时间:2023-07-24
阅读:
目录

常用Excel导出方式

在 C# 中,常用的Excel 文件导出 方式包括:

  1. 使用 Microsoft Office Interop Excel 组件:这是一种使用 Microsoft Excel 应用程序对象模型来创建和编辑 Excel 文件的方式。它提供了强大的功能,但需要安装 Microsoft Excel 或者 Microsoft Office 套件。
  2. 使用 NPOI 组件:NPOI 是一个 C#/.NET 平台上的开源组件,它可以读写 Microsoft Office 格式的文档,包括 Excel、Word 和 PowerPoint 等。相比于 Interop Excel 组件,NPOI 更加轻量级,不需要依赖于 Microsoft Excel 应用程序。
  3. 使用 EPPlus 组件:EPPlus 是一个免费的开源组件,它可以创建和读取 Excel 文件。它提供了一些方便的方法,如对单元格格式、图表、公式等进行操作。EPPlus 支持 .NET Framework 3.5 及更高版本,并不需要依赖于 Microsoft Excel 应用程序。
  4. 使用 ClosedXML 组件:ClosedXML 是一个简单易用的开源组件,它可以读取、创建和修改 Excel 文件。与 EPPlus 类似,它也提供了一些方便的方法来操纵 Excel 文件。ClosedXML 支持 .NET Framework 4.0 及更高版本。

以上是常用的几种 C# 导出 Excel 文件的方式,每种方式都有其特点和优缺点,选择适合自己需求的方式进行开发即可。以下针对每种导出方式,罗列了具体步骤以及Demo。

1.使用 Microsoft Office Interop Excel 组件导出 Excel 文件

使用 Microsoft Office Interop Excel 组件导出 Excel 文件的步骤如下:

  1. 引用 Microsoft.Office.Interop.Excel 命名空间:在项目中添加对 Microsoft.Office.Interop.Excel 的引用,或者使用 NuGet 包管理器安装它。
  2. 创建 Excel 应用程序对象:使用 Application 类创建一个 Excel 应用程序对象。
  3. 创建工作簿对象:使用 Application.Workbooks.Add() 方法创建一个新的工作簿对象。
  4. 获取工作表对象:使用 Workbook.Worksheets 属性获取工作表集合,并使用索引或名称获取工作表对象。
  5. 向单元格写入数据:使用 Worksheet.Cells 属性获取单元格对象,并使用 Range.Value 属性或 Range.Formula 属性向单元格写入数据。
  6. 保存 Excel 文件:使用 Workbook.SaveAs() 方法将 Excel 文件保存到磁盘。
  7. 关闭 Excel 应用程序和工作簿对象:使用 Workbook.Close() 方法关闭工作簿对象,并使用 Application.Quit() 方法关闭 Excel 应用程序对象。
  8. 释放资源:使用 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 文件的步骤如下:

  1. 引用 NPOI 命名空间:在项目中添加对 NPOI 的引用,或者使用 NuGet 包管理器安装它。
  2. 创建工作簿对象:使用 HSSFWorkbookXSSFWorkbook 类创建一个新的工作簿对象,分别对应于 Excel 的 .xls 和 .xlsx 格式。
  3. 获取工作表对象:使用 CreateSheet() 方法创建一个新的工作表对象,并设置工作表名称。
  4. 设置单元格样式:可以使用 CellStyle 类和 Font 类来设置单元格样式。
  5. 向单元格写入数据:使用 CreateRow() 方法创建一个新的行对象,使用 CreateCell() 方法创建一个新的单元格对象,并使用 SetValue() 方法向单元格写入数据。
  6. 保存 Excel 文件:使用 FileStream 类将 Excel 文件保存到磁盘。
  7. 释放资源:使用 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 文件的步骤如下:

  1. 引用 EPPlus 命名空间:在项目中添加对 EPPlus 的引用,或者使用 NuGet 包管理器安装它。
  2. 创建工作簿对象:使用 ExcelPackage 类创建一个新的工作簿对象。
  3. 获取工作表对象:使用 Workbook.Worksheets.Add() 方法创建一个新的工作表对象,并设置工作表名称。
  4. 设置单元格样式:可以使用 ExcelRange.Style 属性来设置单元格样式。
  5. 向单元格写入数据:使用 SetValue() 方法向单元格写入数据。
  6. 保存 Excel 文件:使用 ExcelPackage.SaveAs() 方法将 Excel 文件保存到磁盘。
  7. 释放资源:使用 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 文件的步骤如下:

  1. 引用 ClosedXML 命名空间:在项目中添加对 ClosedXML 的引用,或者使用 NuGet 包管理器安装它。
  2. 创建工作簿对象:使用 XLWorkbook 类创建一个新的工作簿对象。
  3. 获取工作表对象:使用 AddWorksheet() 方法创建一个新的工作表对象,并设置工作表名称。
  4. 设置单元格样式:可以使用 IXLStyle 接口和 IXLFont 接口来设置单元格样式。
  5. 向单元格写入数据:使用 SetValue() 方法向单元格写入数据。
  6. 保存 Excel 文件:使用 SaveAs() 方法将 Excel 文件保存到磁盘。
  7. 释放资源:使用 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() 方法释放工作簿对象的资源。 

总结

返回顶部
顶部