在项目中需要使用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。虽然不知道二者有什么关系,但总感觉很相似。

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中方案中,笔者最常使用的是EPPlusSpire.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

C#读写Excel的4种方案(OpenXml、NPOI、EPPlus、Spire.Office)相关推荐

  1. C#读写Excel的几种方法

    一.简述: 因为一些需要,需要使用excel读写,之前采用csv文件方式读写有些局限,而且,因为最近这台电脑的office组件右问题,这个方法用不了了.所以,得探索一下Excel新的读取方式,留个记录 ...

  2. netty解决TCP粘包/拆包导致的半包读写问题的三种方案

    解决方案一:LineBasedFrameDecoder+StringDecoder来解决TCP的粘包/拆包问题 只需要在客户端和服务端加上45.46两行代码并且在发送消息的时候加上换行符即可解决TCP ...

  3. VS2010 MFC通过OLE方式读写Excel文件(实例+工程文件)

    最近一个同学说是要做一个报账的软件,总体上要实现的功能就是读写Excel文件,于是自己就开始在网上找读写Excel的方法,首先看到了C/C++读写Excel的几种方法,说是读写的方法有很多,但是反正就 ...

  4. python里读写excel等数据文件的6种常用方式

    下面整理下python有哪些方式可以读取数据文件. 1. python内置方法(read.readline.readlines) read() : 一次性读取整个文件内容.推荐使用read(size) ...

  5. 【Win 10 应用开发】文件读写的三种方案

    本文老周就跟伙伴们探讨一下关于文件读写的方法.总得来说嘛,有三种方案可以用,而且每种方案都各有特色,也说不上哪种较好.反正你得记住老祖宗留给我们的大智慧--事无定法,灵活运用者为上. OK,咱们开始吧 ...

  6. python读excel 包含格式_python里读写excel等数据文件的几种常用方式

    python处理数据文件第一步是要读取数据,文件类型主要包括文本文件(csv.txt等).excel文件.数据库文件.api等. 下面整理下python有哪些方式可以读取数据文件. 1. python ...

  7. android读取excel文件_python里读写excel等数据文件的几种常用方式

    python处理数据文件第一步是要读取数据,文件类型主要包括文本文件(csv.txt等).excel文件.数据库文件.api等. 下面整理下python有哪些方式可以读取数据文件. 1. python ...

  8. 【译】Asp.Net 导出 Excel 数据的9种方案

    简介 Excel 的强大之处在于它不仅仅只能打开Excel格式的文档,它还能打开CSV格式.Tab格式.website table 等多钟格式的文档.它具备自动识别行号,字符,格式化数字等功能,例如: ...

  9. Asp.Net 导出数据格式为Excel 数据的9种方案

    Excel 的强大之处在于它不仅仅只能打开Excel格式的文档,它还能打开CSV格式.Tab格式.website table 等多钟格式的文档.它具备自动识别行号,字符,格式化数字等功能,例如:如果你 ...

最新文章

  1. 每天学一点flash(15) xml的一些常见写法
  2. 百度自动驾驶出租车服务在北京全面开放 可免费试乘
  3. 每日一皮:这一定是“宅”的极致了...
  4. Linux (CentOS)增加删除用户
  5. 吴恩达深度学习课程deeplearning.ai课程作业:Class 1 Week 2 assignment2_2
  6. boost::spirit模块实现复杂的日期解析器的测试程序
  7. asp.net core 使用Mysql和Dapper
  8. Docker系列之AspNetCore Runtime VS .NetCore Runtime VS SDK(四)
  9. Spring Boot Data JPA
  10. 怎么在jquery里清空文本框的内容
  11. Android 生成分享长图并且添加全图水印
  12. 如何配置数据库ODBC数据源
  13. 国外大神一张图学会python-12306看了会沉默,国外大神利用机器学习15分钟破解网站验证码!...
  14. 190223每日一句
  15. hⅰgh怎么读音发音英语_英语发音规则---gh
  16. SAP PS 创建预留+采购申请
  17. 转载:Max vs Maya
  18. 如何推广微信公众号(快速增加粉丝数量)?
  19. 微分,梯度及梯度下降法
  20. C++类的虚函数表和虚函数在内存中的位置

热门文章

  1. class torch.optim.lr_scheduler.LambdaLR
  2. FPGA : 学习交流的网站和社区
  3. JAVA jdk8安装
  4. 如何拦截烦人的视频广告
  5. 证券交易买进卖出手续费公式
  6. Hive常用库表操作及知识汇总
  7. 模板解析原理,脱裤子放屁
  8. 一个夭折 脱裤子放屁的QSql Sqlite操作类
  9. 开关电源学习——基本元件之电容
  10. 验证码之google的reCAPTCHA使用