在C#开发中,将数据写入Excel文件是常见的需求,比如导出报表、保存业务数据等。目前主流的实现方式有两种,分别是使用EPPlus库和NPOI库,下面分别介绍两种方案的实现方法。

方案一:使用EPPlus库写入Excel
环境准备
首先需要安装EPPlus库,可以通过NuGet包管理器搜索EPPlus安装,也可以在项目文件中添加以下引用配置:
<PackageReference Include="EPPlus" Version="6.2.3" />
完整实现代码
以下代码实现了创建Excel文件、写入表头和数据内容的完整逻辑:
using OfficeOpenXml;
using System;
using System.IO;
namespace ExcelWriteDemo
{
class EPPlusWriteExample
{
static void Main(string[] args)
{
// 设置EPPlus的非商业许可
ExcelPackage.LicenseContext = LicenseContext.NonCommercial;
// 定义Excel文件路径
string filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "test_epplus.xlsx");
// 创建Excel文件对象
using (ExcelPackage excelPackage = new ExcelPackage())
{
// 添加工作表
ExcelWorksheet worksheet = excelPackage.Worksheets.Add("学生信息");
// 写入表头
worksheet.Cells[1, 1].Value = "姓名";
worksheet.Cells[1, 2].Value = "年龄";
worksheet.Cells[1, 3].Value = "班级";
// 写入数据行
worksheet.Cells[2, 1].Value = "张三";
worksheet.Cells[2, 2].Value = 18;
worksheet.Cells[2, 3].Value = "高三一班";
worksheet.Cells[3, 1].Value = "李四";
worksheet.Cells[3, 2].Value = 19;
worksheet.Cells[3, 3].Value = "高三二班";
// 自动调整列宽
worksheet.Cells[worksheet.Dimension.Address].AutoFitColumns();
// 保存文件
excelPackage.SaveAs(new FileInfo(filePath));
}
Console.WriteLine("EPPlus写入Excel完成,文件路径:" + filePath);
}
}
}
方案二:使用NPOI库写入Excel
环境准备
NPOI库支持操作xls和xlsx两种格式的Excel文件,安装方式同样通过NuGet,搜索NPOI安装即可,项目文件配置如下:
<PackageReference Include="NPOI" Version="2.6.1" />
完整实现代码
以下代码实现了使用NPOI写入xlsx格式Excel文件的完整逻辑:
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
using System;
using System.IO;
namespace ExcelWriteDemo
{
class NPOIWriteExample
{
static void Main(string[] args)
{
// 创建工作簿对象,xlsx格式对应XSSFWorkbook
IWorkbook workbook = new XSSFWorkbook();
// 添加工作表
ISheet sheet = workbook.CreateSheet("商品信息");
// 创建表头行
IRow headerRow = sheet.CreateRow(0);
headerRow.CreateCell(0).SetCellValue("商品名称");
headerRow.CreateCell(1).SetCellValue("单价");
headerRow.CreateCell(2).SetCellValue("库存数量");
// 创建数据行
IRow dataRow1 = sheet.CreateRow(1);
dataRow1.CreateCell(0).SetCellValue("笔记本电脑");
dataRow1.CreateCell(1).SetCellValue(4999.00);
dataRow1.CreateCell(2).SetCellValue(50);
IRow dataRow2 = sheet.CreateRow(2);
dataRow2.CreateCell(0).SetCellValue("无线鼠标");
dataRow2.CreateCell(1).SetCellValue(89.00);
dataRow2.CreateCell(2).SetCellValue(200);
// 定义文件保存路径
string filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "test_npoi.xlsx");
// 写入文件
using (FileStream fs = new FileStream(filePath, FileMode.Create, FileAccess.Write))
{
workbook.Write(fs);
}
Console.WriteLine("NPOI写入Excel完成,文件路径:" + filePath);
}
}
}
两种方案对比
可以通过以下表格了解两种库的适用场景:
| 对比项 | EPPlus | NPOI |
|---|---|---|
| 支持格式 | 仅支持xlsx | 支持xls和xlsx |
| 使用复杂度 | API简洁,上手快 | API稍复杂,功能更全面 |
| 性能表现 | 处理大文件性能较好 | 兼容性好,老格式支持完善 |
常见问题说明
- 如果写入的文件需要兼容老版本Office,建议选择NPOI库,生成xls格式文件。
- 使用EPPlus时需要注意许可问题,商业项目需要购买对应许可,非商业项目设置
LicenseContext.NonCommercial即可。 - 写入大量数据时,建议批量操作单元格,避免频繁创建对象影响性能。
以上代码都是可以直接运行的完整实例,开发者可以根据自己的项目需求选择合适的方案,调整写入的表头和数据内容即可实现对应的Excel导出功能。