前言
导出成为很多系统的必备功能,之前分享过导出PDF的功能,这里来分享一下Excel的导出;
提到Excel导出,NPOI肯定是很多小伙伴的首选,在以往的项目中也用其完成了很多导出需求;对于NPOI,个人感觉使用还是相对比较复杂,填充数据,单元格格式或样式,公式计算等,所以就想着换个库试试;和同事简单的沟通,EPPlus 和 Magicodes.IE 感觉都不错,但从Nuget包的下载量来看,EPPlus明显更胜一筹,而且在当时的业务需求中EPPlus更加合适,所以接下来的分享主要针对EPPlus。
注:EPPlus从版本5开始,如果使用就要求需要商业许可啦,但从业务功能来看,5之前的版本对于绝大多数业务场景够用啦,别排斥,看看之前的版本下载量:
不扯那么多啦,如果小伙伴了解更多关于EPPlus信息,github地址为:https://github.com/JanKallman/EPPlus/wiki。
接下来以平时常用功能为主,和小伙伴分享一下使用。
正文
这里新建一个API项目,针对每个功能单独一个接口进行演示,引入的EPPlus版本为4.5.3.3。
1. 数据填充;
EPPlus数据填充很简单,不需要创建行、列,直接定位到单元格赋值即可。两种定位单元格方式,如下:
通过具体行和列的来定位
这种方式定位比较灵活,也是用的比较多的。
代码实现如下:
运行效果:
通过单元格标识来定位
通过单元格标识进行定位,如上图,图中Excel的列标识为字母,行标识为数字,所以第一个单元格的定位可以对应为A1,第二个单元格为B1,以此类推。
代码实现:
运行效果,同样在浏览器中输入对应的接口地址,导出Excel:
2. 公式自动计算;
在以往导出的操作中,关于计算和汇总的数据很多都是在程序中先算好,然后再填充到单元格中,其实使用Excel公式超级方便;
代码实现:
运行效果:
3. 样式设置;
单个单元格指定样式
代码实现:
效果如下:
虽然效果也能实现,但每一个单元格都指定一遍,太麻烦了;下面的范围设置就比较给力;
范围指定样式
代码实现:
运行效果:
设置公共样式,如果所有数据都需要统一的对齐样式,所有单元格都需要边框,可以统一设置;
公共样式直接针对worksheet中的所有单元格设置即可;
代码实现:
运行效果:
4. 合并单元格;
导出数据时,合并单元格是常有的事,我平常用将其分为列合并和行合并两种:
列合并
在我日常开发中,列合并通常在表头用的比较多,所以算是比较固定的格式,直接指定合并的范围即可;
代码实现:
调用:
运行效果:
当然也可以根据需求,动态设置行进行合并;
行合并
行合并主要是针对数据,当连续单元格值相等的情况,通常会要求进行行合并;如上图中前两行的第一个单元格数据都为111,需将其合并。
代码实现:
调用:
运行效果:
5. 自适应列宽和自适应内容
当单元格内容比较多时,通常会用到以下两种方式,如图:
自适应列宽:将字体缩小填充到单元格,单元格列宽不变;
自适应内容:单元格根据内容填充,内容多宽就显示多宽;
代码实现如下:
运行效果如下:
6. 大数据导出
有些导出需求,需要导出大量的数据,如果通过上述内存的方式导出,可能会因为数据量大导致数据处理超时或内存泄露导致导出异常,通常这种需求,会采用异步的方式导出数据;大概步骤如下:
用户点击导出操作,后台生成一条导出记录,即导出任务,包括导出时选择的条件、导出状态等信息;
通过消息队列或者是后台任务的形式,获取到导出任务,得到导出条件,通过后台任务进行导出操作;
保存对应文件,将导出后台任务状态改为已完成;
用户就可以下载生成的文件;
保存文件的代码实现:
将生成的文件和任务、站点关联起来就可以根据任务下载啦;这里就不演示了,和上传图片一样道理。
演示的代码地址:https://github.com/zyq025/DotNetCoreStudyDemo/tree/main/ExportExcelDemo
总结
关于使用EPPlus导出Excel的常用功能演示就分享到这了;当然也可以进行导入的操作,只是读取数据而已,这个就留给小伙伴自己实操练习啦。