C# 读写 Excel 四种方案(OpenXml、NPOI、EPPlus、Spire.Office)

发布时间 2023-12-18 22:07:51作者: 漫思
C# 读写 Excel 四种方案(OpenXml、NPOI、EPPlus、Spire.Office)

C# 读写 Excel 四种方案(OpenXml、NPOI、EPPlus、Spire.Office)

 
你经常看 TA 的内容

前言

在项目中需要使用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:

NuGet:

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

官方文档:

3、NPOI

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

Java POI:

在C#中,有开源免费的NPOI。虽然不知道二者有什么关系,但总感觉很相似。

GitHub:

NuGet:

使用方法

publicvoidTestNPOI() { stringsourceFile=@"D:\sourceFile.xlsx"; stringtargetFile=@"D:\targetFile.xlsx"; IWorkbookworkbook=newXSSFWorkbook(sourceFile); ISheetsheet1=workbook.GetSheet("Sheet1"); sheet1.CreateRow(0).CreateCell(0).SetCellValue(1); sheet1.CreateRow(1).CreateCell(0).SetCellValue(2); sheet1.CreateRow(2).CreateCell(0).SetCellValue(3); FileStreamfs=newFileStream(targetFile,FileMode.Create); workbook.Write(fs); workbook.Close(); }

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

4、EPPlus

官方网站:

GitHub:

NuGet:

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

使用方法

publicvoidTestEPPlus() { stringsourceFile=@"D:\sourceFile.xlsx"; stringtargetFile=@"D:\targetFile.xlsx"; ExcelPackage.LicenseContext=LicenseContext.NonCommercial;//指明非商业应用 ExcelPackagepackage=newExcelPackage(sourceFile);//加载Excel工作簿 ExcelWorksheetsheet1=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

官方网站:

GitHub:

NuGet:

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

使用方法

publicvoidTestSpireOffice() { stringsourceFile=@"D:\sourceFile.xlsx"; stringtargetFile=@"D:\targetFile.xlsx"; Workbookworkbook=newWorkbook(); workbook.LoadFromFile(sourceFile);//加载Excel工作簿 Worksheetsheet1=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中方案中,笔者最常使用的是EPPlusSpire.Office。毕竟是商业软件,体验确实不一样。免费版功能够用即可。

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

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

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

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

OpenXml

NPOI

EPPlus

转自:纸短情长ZF

链接:

 

版权声明:本文来源于网友收集或网友供稿,仅供学习交流之用,如果有侵权,请转告小编或者留言,本公众号立即删除。


 

关注公众号↑↑↑:DotNet开发跳槽❀点分享点收藏点点赞点在看