.NET修仙传
修炼秘籍
.net 修炼路线图
书籍大全
C#入门后该如何进阶?如何提升自己?
读写 Excel 四种方案
书籍大全
dotnet命令大全
C# 程序集加载方法
linux 下部署.net环境
.NET WebAPI中FromRoute、FromQuery、FromBody的关键角色与用法
C# 新用法
盘点C#最有价值的10个语法糖
C#基础语法与数据类型
序列化
C# 7.0
模式匹配Pattern Matching
优秀实用的类库推荐
2024年C#优秀实用的类库推荐
依赖注入与中间件
依赖注入
查询所有已注入的服务
WebApi实现批量注入
原生依赖注入
自动依赖注入框架
优秀中间件
依赖注入
Autofac
生命周期
文档操作
PDF操作
PDF合并及生成书签目录
Excel操作
几个Excel文件合并去重分类
Excel文件之COM组件方式
操作Excel文件之NPOI
INI文件
面试宝典
WebService、WCF、WebAPI、一般处理程序
C# 线程和进程的区别
asp.net core 服务生命周期
asp.net core 的中间件都有哪些
操作系统编程
获取搜狗输入法中英文
com组件集成
执行系统命令
通过句柄嵌入exe窗体程序
windows-开机自启动
程序调用cmd命令生成WCF服务的客户端调用文件
获取电脑信息
键盘记录器
键盘改键功能
监听鼠标操作
框架揭秘
01编程初体验
中间件 Middleware
路由
配置管理
配置系统
配置管理
日志管理
Log4Net
NLog
.net core原始日志记录
日志管理
Serilog
LINQ
LINQ概讲
LINQ编程
常用方法
ORM
EF Core初始化
EF Core的实体类配置
执行原生SQL语句
EF Core
操作sqlite
操作Mysql数据库
操作LiteDB
AutoMapper高效实现对象映射
AutoMapper
AutoMapper 10个常用方法总结
缓存
Redis支持哪几种数据类型?
什么是Redis?简述它的优缺点?
Redis相比memcached有哪些优势?
认证
什么是 JWT?它是如何工作的?
.net framework jwt
.net core Jwt操作
认证管理
.Net WebApi校验Token/参数的几种方式
鉴权授权
Authorization的几种方式
基础语法
集合
1、C#中常用集合类型
yield return 简化迭代并提高代码质量
AOP
.net core AOP
操作筛选器
网络编程
TCP 连接的前世今生
HttpRequest,WebRequest,HttpWebRequest,WebClient,HttpClient 之间的区别
网络编程
WebApi获取客户信息
通信
HTTP通信
公共类-HttpHelper
多线程编程
十种线程方式分析
Task-筑基期
parallel-筑基
消息队列
Kafka、ActiveMQ、RabbitMQ、RocketMQ 有什么优缺点?
构建高性能 API 的高级技术
优秀教程网站
每日学习地址
全套教程汇总
理解ASP.NET Core
定时任务
定时器的三种使用方式
定时任务之windows任务计划程序
创建任务到Windows任务计划程序
定时任务之Quartz.Net
IHostedService启动时运行定时任务
JSON序列化反序列化工具
前辈
发布部署
应用部署
GRPC
使用GRPC多个proto文件
本文档使用 MrDoc 发布
-
+
首页
读写 Excel 四种方案
# 读写 Excel 四种方案 ```mindmap # 读写 Excel 四种方案 ## Microsoft.Office.Interop.Excel ## OpenXml ## NPOI ## EPPlus ## Spire.Office for .NET ``` - 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 功能介绍 >i 1、Microsoft.Office.Interop.Excel 最原始的操作库,兼容性一般,偶尔会出现内存泄漏和文件无法解除占用的问题(也可能是我太菜),不推荐使用。 >i 2、OpenXml GitHub:github.com/OfficeDev/Open-XML-SDK NuGet:nuget.org/packages/DocumentFormat.OpenXml 微软官方提供的一个SDK用于读写Office。 官方文档:docs.microsoft.com/en-us/office/open-xml/open-xml-sdk >i 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/ 使用方法 ```java 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在使用过程中有些不习惯,特别是在设置单元格内容时,和传统的思维方式不太一样。 >i 4、EPPlus 官方网站:https://epplussoftware.com/ GitHub:https://github.com/EPPlusSoftware NuGet:https://www.nuget.org/packages/EPPlus/ EPPlus通过LicenseContext来区分商业应用(Commercial)和非商业应用(NonCommercial)。 使用方法 ```java 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等其他文件。 >i 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等。分为收费版和免费版。 使用方法 ```java 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 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/
孙端己
2024年10月14日 16:51
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码