[转]C#读写Excel的4种方案(OpenXml、NPOI、EPPlus、Spire.Office)


原文链接:C#读写Excel的4种方案(OpenXml、NPOI、EPPlus、Spire.Office)

简介#

在项目中需要使用C#读写Excel,每天定时将数据输出到Excel表格中。在参考了很多的方案后,找到了4个常用的方案,并提供了一些小Demo。更多功能和示例可以参考官方文档。

  • 1、Microsoft.Office.Interop.Excel:不推荐使用。
  • 2、OpenXml:微软官方提供的SDK。
  • 3、NPOI:第三方开源框架,口碑很好。
  • 4、EPPlus:只能用于读写Excel,笔者目前使用最多。
  • 5、Spire.Office for .NET:商业解决方案,功能完善强大。免费版功能也够用。

IDE:Visual Studio 2019 和 Visual Studio 2022
框架:.NET Framework 4.8 和 .NET 6.0

1、Microsoft.Office.Interop.Excel#

最原始的操作库,兼容性一般,偶尔会出现内存泄漏和文件无法解除占用的问题(也可能是我太菜),不推荐使用。

2、OpenXml#

GitHub:GitHub - OfficeDev/Open-XML-SDK: Open XML SDK by Microsoft

NuGet:NuGet Gallery | DocumentFormat.OpenXml 2.14.0

微软官方提供的一个SDK用于读写Office。

官方文档:Welcome to the Open XML SDK 2.5 for Office | Microsoft Docs

3、NPOI#

在Java中,有Apache POI这样一个API用于操作Office。

Java POI:Apache POI - the Java API for Microsoft Documents

在C#中,有开源免费的NPOI,NPOI 是 POI 项目的 .NET 版本

GitHub:GitHub - nissl-lab/npoi

NuGet:NuGet Gallery | NPOI 2.5.5

使用方法:

public void TestNPOI()
{
    string sourceFile = @"D:\sourceFile.xlsx";
    string targetFile = @"D:\targetFile.xlsx";
 
    IWorkbook workbook = new XSSFWorkbook(sourceFile);
    ISheet sheet1 = workbook.GetSheet("Sheet1");
 
    sheet1.CreateRow(0).CreateCell(0).SetCellValue(1);
    sheet1.CreateRow(1).CreateCell(0).SetCellValue(2);
    sheet1.CreateRow(2).CreateCell(0).SetCellValue(3);
 
    FileStream fs = new FileStream(targetFile, FileMode.Create);
    workbook.Write(fs);
    workbook.Close();
}

NPOI在使用过程中有些不习惯,特别是在设置单元格内容时,和传统的思维方式不太一样。

4、EPPlus#

官方网站:Excel spreadsheet library for .NET Framework/Core - EPPlus Software

GitHub:EPPlus Software · GitHub

NuGet:NuGet Gallery | EPPlus 5.8.3

EPPlus通过LicenseContext来区分商业应用(Commercial)和非商业应用(NonCommercial)。

使用方法:

public void TestEPPlus()
{
    string sourceFile = @"D:\sourceFile.xlsx";
    string targetFile = @"D:\targetFile.xlsx";
 
    ExcelPackage.LicenseContext = LicenseContext.NonCommercial;//指明非商业应用
    ExcelPackage package = new ExcelPackage(sourceFile);//加载Excel工作簿
    ExcelWorksheet sheet1 = package.Workbook.Worksheets["Sheet1"];//读取工作簿中名为"Sheet1"的工作表
 
    sheet1.Cells[1, 1].Value = "A";//设置单元格内容
    sheet1.Cells[2, 2].Value = "B";
    sheet1.Cells[3, 3].Value = "C";
 
    sheet1.Cells[1, 2].Value = "1";
    sheet1.Cells[2, 2].Value = "2";
    sheet1.Cells[3, 2].Value = "3";
 
    //package.Save();//将更改保存到原文件
    package.SaveAs(targetFile);//将更改保存到新的文件,类似于另存为
}

笔者目前使用最多的框架,操作简单,符合使用习惯。但是EPPlus只能用于读写Excel,不能读写Word等其他文件。

5、Spire.Office for .NET#

官方网站:C#/VB.Net Excel, Word, PowerPoint, PDF Component

GitHub:eiceblue (E-iceblue Product Family) · GitHub

NuGet:NuGet Gallery | FreeSpire.Office 4.3.1

Spire.Office提供了一整套的Office解决方案,可以读写、展示Word、Excel、PDF等。分为收费版和免费版。

使用方法:

public void TestSpireOffice()
{
    string sourceFile = @"D:\sourceFile.xlsx";
    string targetFile = @"D:\targetFile.xlsx";
 
    Workbook workbook = new Workbook();
    workbook.LoadFromFile(sourceFile);//加载Excel工作簿
    Worksheet sheet1 = workbook.Worksheets["Sheet1"];//读取工作簿中名为"Sheet1"的工作表
 
    sheet1.SetCellValue(1, 1, "A");//设置单元格内容
    sheet1.SetCellValue(2, 1, "B");
    sheet1.SetCellValue(3, 1, "C");
 
    sheet1.SetCellValue(1, 2, "1");
    sheet1.SetCellValue(2, 2, "2");
    sheet1.SetCellValue(3, 2, "3");
 
    workbook.Save();//将更改保存到原文件
    workbook.SaveToFile(targetFile);//将更改保存到新的文件,类似于另存为
}

Spire.Office的收费版可以在WinForm中直接展示Word、Excel、PDF文件内容,但是免费版不能展示Excel。一种替代方式是先将Excel转换成PDF,再展示PDF,但这种方案只能展示前三页。

总结:#

以上介绍的5中方案中,笔者最常使用的是EPPlus和Spire.Office。毕竟是商业软件,体验确实不一样。免费版功能够用即可。

如果只是需要读写Excel,那么EPPlus非常方便而且符合使用习惯。

如果需要在WinForm中展示,那么Spire.Office可能是唯一选择。

如果需要读写多种Word、Excel等Office文件,OpenXml和NPOI也是不错的选择。

写完文章发现了一个网站,也介绍了许多关于C#读写Office的各种方法,比我写的详细多了,推荐给大家。

OpenXml:Read/Write Excel file using C# .NET Core | TheCodeBuzz

NPOI:Read and Write Excel file in C# .NET Core using NPOI | TheCodeBuzz

EPPlus:Read/Write Excel file in C# .NET Core using EPPlus | TheCodeBuzz

posted @   二次元攻城狮  阅读(2991)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
历史上的今天:
2021-06-17 C++追根究底(持续更新)
  1. 1 烟花易冷 小柔Channel
  2. 2 红颜如霜 江壹纯
  3. 3 不谓侠 小桃Channel
  4. 4 小小恋歌 新坦结衣
  5. 5 神预言 袁娅维TIARAY
神预言 - 袁娅维TIARAY
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.
点击右上角即可分享
微信分享提示
主题色彩