一,前言
在使用C#编程时,我们难免会要对EXCEL表格做读取和导出的操作,但是C#自带的文件读写能力在效率不高的同时,也存在着使用复杂,仅能处理原始数据,缺乏结构化操作能力的问题,为此我将介绍一个C#中专门读写EXCEL的第三方库——EPPLUS。
二,介绍
1,EPPLUS的优势
EPPlus相较于C#自带的文件读写(如System.IO基础操作或Microsoft.Office.Interop.Excel)具有以下显著优势:
-
无需Office依赖
EPPlus完全独立运行,无需安装Excel或其他Office组件即可处理.xlsx文件,特别适合服务器环境或无界面应用。而Interop.Excel必须依赖本地Office安装,且存在进程残留和许可证问题。 -
高性能与低内存占用
采用Open XML格式直接操作,支持流式读写和大文件处理,内存效率显著高于Interop.Excel的COM调用。测试表明EPPlus处理.xlsx文件的速度比NPOI更快,且内存占用更低。 -
功能完整性
支持单元格样式、公式计算、图表生成、数据验证等高级功能,接近原生Excel操作体验。而基础文件读写仅能处理原始数据,缺乏结构化操作能力。 -
跨平台兼容性
可在Windows/Linux/macOS等环境中运行,与.NET Core/.NET 5+完全兼容,而Interop.Excel仅限Windows平台。 -
开发便捷性
提供直观的API设计(如worksheet.Cells[row,col].Value),相比OpenXML的底层操作或Interop.Excel的复杂对象模型更易上手。 -
免费开源
基于Apache 2.0许可证,商业项目可免费使用,而Interop.Excel需购买Office授权
2,EPPLUS使用的注意事项
首先,EPPLUS是一个包含商用模式的第三方插件,所以为了避免使用时出现不必要的麻烦,我们需要在使用前进行非商业声明方法如下:
//高版本使用
ExcelPackage.License.SetNonCommercialPersonal("个人姓名");
//低版本使用
ExcelPackage.LicenseContext = LicenseContext.NonCommercial;
注意要区分高低版本的声明方式,错误的声明方式不会有任何效果。在这之后,我们还需要生成一个带非商业用途的xlsx表格用于测试,这一步可以通过代码完成,具体代码如下:
using OfficeOpenXml;
ExcelPackage.License.SetNonCommercialOrganization("My Noncommercial Organization");
using (var package = new ExcelPackage())
{
var worksheet = package.Workbook.Worksheets.Add("Sheet1");
worksheet.Cells["A1"].Value = "Hello EPPlus!";
package.SaveAs(new FileInfo("NewWorkbook.xlsx"));
}
完成以上事项就可以正常的使用EPPLUS进行学习了。
3,使用方法
using OfficeOpenXml;
using System;
using System.IO;
class Program
{
static void Main()
{
// 设置非商用许可证(按版本使用)
ExcelPackage.LicenseContext = LicenseContext.NonCommercial;
//ExcelPackage.License.SetNonCommercialPersonal("个人姓名");
// 创建文件对象
var file = new FileInfo("Sample.xlsx");
using (var package = new ExcelPackage(file))
{
// 添加工作表
var worksheet = package.Workbook.Worksheets.Add("DataSheet");
// 写入表头
worksheet.Cells["A1"].Value = "ID";
worksheet.Cells["B1"].Value = "Product";
worksheet.Cells["C1"].Value = "Price";
// 写入数据行
worksheet.Cells["A2"].Value = 1001;
worksheet.Cells["B2"].Value = "Laptop";
worksheet.Cells["C2"].Value = 899.99;
// 自动调整列宽
worksheet.Cells[1, 1, 2, 3].AutoFitColumns();
// 保存文件
package.Save();
Console.WriteLine("Excel文件已生成: " + file.FullName);
}
}
}
以上代码中主要用到了EPPLUS中的以下方法:
1. ExcelPackage核心方法
-
ExcelPackage构造函数
通过FileInfo参数初始化包对象,管理整个Excel文档的生命周期(需配合using确保资源释放)。 -
Workbook.Worksheets.Add()
在Workbook中创建新工作表,返回ExcelWorksheet对象。示例中传递表名DataSheet。
2. 单元格操作
-
Cells["A1"].Value
通过A1样式坐标(如"A1")定位单元格并赋值,支持字符串、数字等类型。 -
Cells[row, column, rowCount, columnCount]
行列索引方式定位区域(如Cells[1,1,2,3]),便于批量操作。
3. 格式调整
-
AutoFitColumns()
自动调整指定列的宽度以适应内容(示例中调整第1-3列)。
4. 文件保存
-
Save()
将内存中的ExcelPackage内容写入物理文件,生成.xlsx格式文档。
除了这些方法,EPPLUS中还有更多功能及使用方法,由于篇幅限制,这里不多赘述。
三,总结
以下是C#中EPPLUS库的使用要点总结:
- 核心功能
- 专用于Excel文件读写操作的.NET库
- 支持xlsx/xlsm格式(Office Open XML标准)
- 提供单元格操作、公式计算、图表生成等完整功能
- 基础使用流程
- 必须初始化许可证(非商用需设置
LicenseContext.NonCommercial) - 通过
ExcelPackage类管理文档 - 使用
Worksheets集合操作工作表 - 支持A1标记法和行列索引两种单元格定位方式
- 特色功能
- 样式配置:字体/边框/颜色/数字格式等
- 数据绑定:支持集合数据直接导出
- 公式支持:原生Excel函数计算
- 条件格式:数据条/色阶等高级功能
- 图表生成:柱状图/折线图等15+图表类型
- 性能优化
- 大数据量建议使用
LoadFromCollection批量写入 - 启用计算缓存提升公式性能
- 使用
Dispose释放资源避免内存泄漏
- 版本差异
- v4及以下:LGPL协议可商用
- v5+:非商用需声明许可证
- v8+:必须显式设置
LicenseContext
- 典型应用场景
- 报表导出
- 数据迁移
- 模板填充
- 数据分析预处理

3838

被折叠的 条评论
为什么被折叠?



