C#如何操作Excel文件?NPOI与EPPlus两大类库使用教程与对比

4次阅读

NPOI支持.xls和.xlsx格式,免费且无需office;EPPlus仅支持.xlsx,功能强大但商业用途需授权。根据文件格式、许可证和功能需求选择合适工具

C#如何操作Excel文件?NPOI与EPPlus两大类库使用教程与对比

在C#开发中,操作excel文件是常见需求,比如导出报表、读取数据等。目前最流行的两个第三方库是NPOIEPPlus。它们都功能强大、使用广泛,但各有特点。本文将介绍这两个库的基本用法,并进行对比,帮助你选择适合项目的工具

NPOI 简介与使用示例

NPOI 是 apache POI 项目的 .net 版本,支持读写 Excel 的两种格式:.xls(基于 HSSF)和 .xlsx(基于 XSSF)。它完全由 C# 实现,无需安装 Office 软件。

安装方式:
通过 NuGet 安装:

Install-Package NPOI

创建一个简单的 .xlsx 文件:

“`csharp using NPOI.XSSF.UserModel; using NPOI.SS.UserModel; using System.IO;

var workbook = new XSSFWorkbook(); // 创建工作簿 var sheet = workbook.CreateSheet(“Sheet1”); // 创建工作表

// 创建第一行 var row = sheet.CreateRow(0); row.CreateCell(0).SetCellValue(“姓名”); row.CreateCell(1).SetCellValue(“年龄”);

// 创建第二行 row = sheet.CreateRow(1); row.CreateCell(0).SetCellValue(“张三”); row.CreateCell(1).SetCellValue(25);

// 保存到文件 using (var fs = new Filestream(“demo.xlsx”, FileMode.Create, Fileaccess.Write)) { workbook.Write(fs); }

</p>  <font color="#0066cc"><strong>读取 Excel 文件:</strong></font> <p> ```csharp using (var fs = new FileStream("demo.xlsx", FileMode.Open, FileAccess.Read)) {     var workbook = new XSSFWorkbook(fs);     var sheet = workbook.GetSheetAt(0);      for (int i = 0; i <= sheet.LastRowNum; i++)     {         var row = sheet.GetRow(i);         if (row != null)         {             var name = row.GetCell(0)?.ToString();             var age = row.GetCell(1)?.ToString();             Console.WriteLine($"姓名: {name}, 年龄: {age}");         }     } }

EPPlus 简介与使用示例

EPPlus 是一个专注于 .xlsx 格式的开源库,基于 Open xml SDK 构建。它语法更简洁,支持公式、图表、样式、数据验证等功能,适合现代 Excel 操作。

安装方式:
NuGet 包名(最新版本为 EPPlus.Core 或 EPPlus v5+):

Install-Package EPPlus

注意:从 v5 开始,商业用途需授权,个人/非商业项目可免费使用。

创建 Excel 文件:

“`csharp using OfficeOpenXml; using System.IO;

ExcelPackage.LicenseContext = LicenseContext.NonCommercial; // 必须设置

C#如何操作Excel文件?NPOI与EPPlus两大类库使用教程与对比

PicLumen

专业的AI图像生成和图像处理工具

C#如何操作Excel文件?NPOI与EPPlus两大类库使用教程与对比 348

查看详情 C#如何操作Excel文件?NPOI与EPPlus两大类库使用教程与对比

using (var package = new ExcelPackage()) { var worksheet = package.Workbook.Worksheets.Add(“Sheet1”);

worksheet.Cells[1, 1].Value = "姓名"; worksheet.Cells[1, 2].Value = "年龄";  worksheet.Cells[2, 1].Value = "张三"; worksheet.Cells[2, 2].Value = 25;  // 保存 var fileBytes = package.GetAsByteArray(); File.WriteAllBytes("epplus_demo.xlsx", fileBytes);

}

</p>  <font color="#0066cc"><strong>读取 Excel 文件:</strong></font> <p> ```csharp using (var package = new ExcelPackage(new FileInfo("epplus_demo.xlsx"))) {     var worksheet = package.Workbook.Worksheets[0];     var rowCount = worksheet.Dimension.Rows;      for (int row = 1; row <= rowCount; row++)     {         var name = worksheet.Cells[row, 1].Value?.ToString();         var age = worksheet.Cells[row, 2].Value?.ToString();         Console.WriteLine($"姓名: {name}, 年龄: {age}");     } }

NPOI 与 EPPlus 对比

以下是两个库的主要差异点,帮助你根据项目需求做选择:

  • 格式支持:NPOI 同时支持 .xls 和 .xlsx;EPPlus 只支持 .xlsx(OpenXML 格式)。
  • 性能表现:对于大文件,EPPlus 通常更快,内存占用更低,尤其是处理复杂样式或公式时。
  • API 设计:EPPlus 的 API 更现代、直观,如 worksheet.Cells[“A1”] 支持坐标字符串;NPOI 更接近 java POI,略显繁琐。
  • 功能丰富度:EPPlus 支持图表、透视表、条件格式、数据验证等高级功能;NPOI 功能也在持续增强,但部分高级特性支持较弱。
  • 许可证限制:NPOI 完全免费(Apache 2.0);EPPlus 从 v5 起对商业项目收费(需购买许可证),非商业用途可免费使用。
  • 依赖与兼容性:NPOI 无外部依赖,兼容性好;EPPlus 依赖 OpenXML SDK,在某些环境下需注意版本匹配。

如何选择?

选择哪个库取决于你的实际场景:

  • 需要操作旧版 .xls 文件?选 NPOI
  • 项目为商业用途且预算有限?优先考虑 NPOI 避免授权问题。
  • 只处理 .xlsx,追求开发效率和功能完整性?EPPlus 是更好选择。
  • 需要导出带样式的报表、图表或复杂公式?推荐 EPPlus
  • 跨平台(.NET Core/.NET 5+)部署?两者都支持,但 EPPlus 需注意 LicenseContext 设置。

基本上就这些。两个库都很成熟,掌握其基本用法能极大提升数据处理效率。根据项目需求灵活选用,才能事半功倍。

text=ZqhQzanResources