文档章节

导出Excel功能的3种实现

o
 osc_odyg6b92
发布于 2018/07/13 11:38
字数 1033
阅读 10
收藏 0

「深度学习福利」大神带你进阶工程师,立即查看>>>

项目中总会用到Excel的导出功能,接触过好几个项目,发现有个项目的导出实现特别值得学习。这里学习顺带总结一下。

一、三种方法

我遇到的导出目前有3种处理:

  1. 每个功能一个导出方法;
  2. 写一个通用的Export方法:通过反射实现导出;
  3. 引入公用jar,通过Excel模板实现导出;

二、三种方法分析说明:

2.1 每个功能一个导出方法:

这种方法一般自行拼接表头,和数据。

这种方法最简单,但麻烦。每个导出功能都需要一个方法。代码复用率太低。效率太低;

实现参考:(NullTommy GitHub (点击左边链接)里:MainController里的export3()

2.2 写一个通用的Export方法:通过反射实现导出:

方法入参包含:表头数据、表头数据对应的取值get方法,导出的数据;

方法逻辑:通过反射,获取入参中的get方法,然后通过入参对象取值。实现数据的拼接。

使用这个方法只需传入:表头数组,对应的get方法数组,以及需导出的数据即可。代码中的所有导出都可以复用这个方法,极大提升了效率。

实现参考:NullTommy GitHub (点击左边链接)里:MainController里的export()

2.3 引入公用jarjxls-core,通过Excel模板实现导出:

使用:先构建一个excel模板,放入项目。里面写好表头,设置好对应的数据变量占位符。

方法逻辑:代码根据路径和文件名读取该模板。然后传入需要导出的对象,以及导出的文件名。其他全部由公共的jar帮你实现好了....

这种方法最简单...因为,自己需要动手的地方太少了。上面的第二种还得自己写一个公用方法,这个几乎什么都不用做...

实现参考:实现参考:NullTommy GitHub (点击左边链接)里:MainController里的export2()

注意:

  1. 对于Excel的样式,只需要在模板Excel里设置就好了,包括数字格式,日期格式等等。导出逻辑会自行使用这些设置的样式。
  2. 这种方法在实践过程中,报了好多错。网上搜索总是说jar包引入有问题。我不断引入jar,问题反而越来越严重。
    后来发现是在不断修改pom文件的过程中,IDEA没有及时清除web工程下lib里面的jar,所以我对pom的修改其实一直没生效.....
    最后使用了maven 的 clean 命令,完全清除了web项目,才解决问题。
  3. 这种方法实际只需引入如下jxls-core的jar和poi即可,其他无需多引。如有报错,可参考第二点...如果清除之后还有,请自行百度~~

这个实际使用的jar如下:具体了解可自行百度。

<dependency>
  <groupId>net.sf.jxls</groupId>
  <artifactId>jxls-core</artifactId>
  <version>1.0.6</version>
</dependency>
<dependency>
  <groupId>org.apache.poi</groupId>
  <artifactId>poi</artifactId>
  <version>3.9</version>
</dependency>

三、以上实现可参考项目的提交记录:

里面包含:两种实现的小Case,以及引入的Jar。
代码提交历史: https://github.com/NullTommy/hello/commit/62e588a822499018e4ac47e0277b1c3329b6709e

四、JS接收JAVA后台拼接好的Excel文件

一个很简单的问题,只是没有仔细思考过,所以第一次见也是懵逼的感觉。

JS实现很简单,访问你后台的 Action URL 地址即可。具体你是一个herf标签?还是一个按钮的JS方法中直接访问这个链接都可以。只要达到可以访问你的导出 Action URL 地址即可。

实现参考:

<a href="<你的返回流的Action路径>" >下载</a>  //herf标签
window.location.href = "你的返回流的Action路径";   //location
window.open("你的返回流的Action路径");  //

五、参考:

  1. js要怎么接收后端传的excel文件流? - CSDN博客 https://blog.csdn.net/lixiaoer757/article/details/80272251
  2. javascript - 获取到了后台传过来的excel文件 前端用vue怎么接收并导出? - SegmentFault 思否 https://segmentfault.com/q/1010000011863836
o
粉丝 1
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
用vertx实现高吞吐量的站点计数器

工具:vertx,redis,mongodb,log4j 源代码地址:https://github.com/jianglibo/visitrank 先看架构图: 如果你不熟悉vertx,请先google一下。我这里将vertx当作一个容器,上面所有的圆圈要...

jianglibo
2014/04/03
4.2K
3
SQLServer实现split分割字符串到列

网上已有人实现sqlserver的split函数可将字符串分割成行,但是我们习惯了split返回数组或者列表,因此这里对其做一些改动,最终实现也许不尽如意,但是也能解决一些问题。 先贴上某大牛写的s...

cwalet
2014/05/21
9.6K
0
我的架构演化笔记 功能1: 基本的用户注册

“咚咚”,一阵急促的敲门声, 我从睡梦中惊醒,我靠,这才几点,谁这么早, 开门一看,原来我的小表弟放暑假了,来南京玩,顺便说跟我后面学习一个网站是怎么做出来的。 于是有了下面的一段...

强子哥哥
2014/05/31
976
3
树莓派(Raspberry Pi):完美的家用服务器

自从树莓派发布后,所有在互联网上的网站为此激动人心的设备提供了很多有趣和具有挑战性的使用方法。虽然这些想法都很棒,但树莓派( RPi )最明显却又是最不吸引人的用处是:创建你的完美家用...

异次元
2013/11/09
7.1K
8
XLSX读写库--EPPlus

EPPlus 是使用Open Office XML格式(xlsx)读写Excel 2007 / 2010文件的.net开发库。 EPPlus 支持: 单元格范围 单元格样式(Border, Color, Fill, Font, Number, Alignments) Charts 图片 形状...

匿名
2013/02/01
1W
2

没有更多内容

加载失败,请刷新页面

加载更多

SQL 语句大全

点击上方“掌上编程”,选择“置顶或者星标” 优质文章第一时间送达! 一、基础 「1、说明:创建数据库」 CREATE DATABASE database-name    「2、说明:删除数据库」 drop database ...

GeneralMa
昨天
0
0
山东创睦网络科技有限公司:使用Python爬取全球新冠肺炎疫情数据

使用Python爬取全球新冠肺炎疫情数据 导入所需库包 获取实时数据的url 正式编写程序 查看输出结果 导入所需库包 在获取数据之前,我们需要先安装好所需的包requests和pandas: 1.如果是使用p...

osc_qv1fwke0
45分钟前
14
0
如何1年获得别人3年的工作经验(深度好文)

最近有同学问我,为什么你的工作年限不长,技术却这么厉害,我笑了笑,啥也没说。 我不是不想回答,是不知道怎么回答。在他们的定位可能就是,每方面都懂一点,遇到问题能够快速解决,就是比...

zhang_rick
今天
1
0
新基建带动行业

什么是“新基建”? 什么是“新基建”? 根据央视发布的信息来看,其涵盖了5G基站建设、新能源汽车充电桩、大数据中心、人工智能、工业互联网,特高压,城际以及城轨交通,涉及了七大领域和相...

osc_anefoz50
45分钟前
16
0
怕入错行?这群技术人写了本“择业指南”

计算机专业好找工作吗?哪些方向是当前的主流和热门方向呢? 计算机专业的你是不是还在为职业发展纠结犹豫呢? 刚经历完高考选专业的你是不是还在迷茫徘徊呢? 那么福利来啦! 《软件技术职业...

阿里云云栖号
45分钟前
21
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部