首页 > 编程语言 >C# 读写 Excel 四种方案(OpenXml、NPOI、EPPlus、Spire.Office)

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

时间:2023-12-18 22:12:33浏览次数:34  
标签:Office C# EPPlus 读写 Excel sheet1 https

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

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

翔星 翔星 有10年+工作经验,高级软件工程师,可以解决各种问题   你经常看 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:http://github.com/OfficeDev/Open-XML-SDK

NuGet:http://nuget.org/packages/DocumentFormat.OpenXml

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

官方文档:http://docs.microsoft.com/en-us/office/open-xml/open-xml-sdk

3、NPOI

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

Java POI:https://poi.apache.org/

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

GitHub:https://github.com/nissl-lab/npoi

NuGet:https://www.nuget.org/packages/NPOI/

使用方法

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

官方网站:https://epplussoftware.com/

GitHub:https://github.com/EPPlusSoftware

NuGet:https://www.nuget.org/packages/EPPlus/

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

官方网站:https://www.e-iceblue.com/

GitHub:https://github.com/eiceblue

NuGet:https://www.nuget.org/packages/FreeSpire.Office/

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

https://www.thecodebuzz.com/read-excel-file-in-dotnet-core-2-1/

NPOI

https://www.thecodebuzz.com/read-and-write-excel-file-in-net-core-using-npoi/

EPPlus

https://www.thecodebuzz.com/read-write-excel-in-dotnet-core-epplus/

转自:纸短情长ZF

链接:http://blog.csdn.net/m0_49284219/article/details/121728799

 

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


 

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

标签:Office,C#,EPPlus,读写,Excel,sheet1,https
From: https://www.cnblogs.com/sexintercourse/p/17912441.html

相关文章

  • keys_async_drv.c
    HelloWorld/*按键设备中断触发,poll机制非阻塞,定时器使用方式*///keys按键设备异步通知方式驱动文件keys_async_drv.c#include<linux/module.h>#include<linux/kernel.h>#include<linux/fs.h>#include<linux/init.h>#include<linux/mutex.h>#include<l......
  • 这10个TypeScript高级技巧,助你成为更好的开发者!
    这10个TypeScript高级技巧,助你成为更好的开发者!前端学习站 ​关注他 在使用了一段时间的Typescript之后,我深深地感受到了Typescript在大中型项目中的必要性。可以提前避免很多编译期的bug,比如烦人的拼写问题。并且越来越多的包都在使用TS,所以学习它势在必行......
  • 如何在 C# 中使用 投影(Projection)
    如何在C#中使用投影(Projection)一线码农 ​关注他 你浏览过TA的个人主页投影(Projection)是一种可以将查询结果进行 塑性 的一种操作,你可以使用 投影 将一个object转成仅包含你需要属性的新对象,这篇文章中,我们就一起看看如何使用投影功......
  • Keepalived+Nginx+Tomcat配置高可用负载均衡系统示例
    前言目前生产环境的配置越来越多的使用云服务了,同时负载均衡也基本转向了云厂商提供的服务,但对于绝大多数应用来说,自建集群可能在费用上要更便宜一些,这篇文章也是之前整理的,再次新瓶装旧酒分享给各位。此示例演示在不使用docker的情况下配置负载均衡,内容keepalived+nginx+tomcat......
  • 让你 React 组件水平暴增的 5 个技巧
    让你React组件水平暴增的5个技巧神说要有光​ ​关注他 你经常看TA的内容最近看了一些AntDesign的组件源码,学到一些很实用的技巧,这篇文章来分享一下。首先,我们用create-react-app创建个React项目(选择typescript模版):npxcreate-r......
  • 10个复杂的C# 代码片段
    10个复杂的C#代码片段开心码科技​软件开发行业员工​关注他 你经常看C#话题的内容作为一名使用C#的开发人员,你经常会遇到需要复杂的代码解决方案的情况。在本文中,我们将探讨10个代码片段,用C#解决各种复杂情况。这些片段旨在帮助你解决具有......
  • Java登陆第二十五天——Tomcat、认识JavaWeb项目
    Java项目开发后,需要部署到服务器中,服务器需要有最基本的操作系统。单一的操作系统还不够,因为Java项目经过JVM编译后的是.class文件(字节码文件)。字节码文件的运行需要Java运行环境(JRE)。有了JRE还是不够。不是所有的项目都可以直接运行,还需要服务器软件服务器软......
  • numpy、scipy、pandas、matplotlib的读书报告:
    numpy是Python中用于进行科学计算的基础模块,提供了多维数组对象ndarray以及相关的数学运算和线性代数函数。它能够快速高效地处理大量数据,并提供了丰富的数组操作和数学函数,是进行科学计算和数据分析的重要工具。numpy的主要功能有:创建和操作多维数组,如使用np.array(),np.arange(),n......
  • C# 10 完整特性介绍
    C#10完整特性介绍hez2010coreclrcontributor​关注他 你经常看C#话题的内容前言距离上次介绍C#10的特性已经有一段时间了,伴随着.NET6的开发进入尾声,C#10最终的特性也终于敲定了。总的来说C#10的更新内容很多,并且对类型系统做了不小......
  • 【Azure App Service】当App Service中使用系统标识无法获取Access Token时
    问题描述AppSerive上的应用配置了系统标识(SystemIdentity),通过系统标识获取到访问KeyVault资源的AccessToken。但这次确遇见了无法获取到正常的AccessToken。 验证问题1:查看AppService的门户中是否启用了系统标识  2:进入AppService的Kudu站点,查看Environment参数中IDENT......