项目中总会用到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

导出Excel功能的3种实现的更多相关文章

  1. [转] Asp.Net 导出 Excel 数据的9种方案

    湛刚 de BLOG 原文地址 Asp.Net 导出 Excel 数据的9种方案 简介 Excel 的强大之处在于它不仅仅只能打开Excel格式的文档,它还能打开CSV格式.Tab格式.website ...

  2. PHP导出excel文件的几种方式

    PHP导出excel文件的几种方式 先说说动态生成的内容当作文件来下载的方法: 1.通过把Content-Type设置为application/octet-stream,可以把动态生成的内容当作文件来 ...

  3. 转:PHP导出excel文件的几种方式

    PHP导出excel文件的几种方式 文章来源:http://www.cnblogs.com/fredshare/archive/2012/10/29/2744243.html 先说说动态生成的内容当作 ...

  4. .NET环境下导出Excel表格的两种方式和导入两种类型的Excel表格

    一.导出Excel表格的两种方式,其中两种方式指的是导出XML数据类型的Excel(即保存的时候可以只需要修改扩展名为.xls)和真正的Excel这两种. using System; using Sy ...

  5. .Net MVC 导入导出Excel总结(三种导出Excel方法,一种导入Excel方法) 通过MVC控制器导出导入Excel文件(可用于java SSH架构)

    .Net MVC  导入导出Excel总结(三种导出Excel方法,一种导入Excel方法) [原文地址] 通过MVC控制器导出导入Excel文件(可用于java SSH架构)   public cl ...

  6. Atitit.导出excel功能的设计 与解决方案

    Atitit.导出excel功能的设计 与解决方案 1.1. 项目起源于背景1 1.2. Js  jquery方案(推荐)jquery.table2excel1 1.3. 服务器方案2 1.4. 详细 ...

  7. 项目笔记:导出Excel功能

    1.前台这块: var ids=""; $.post("${basePath}/assets/unRegDeviceAction_getDeviceIds.do" ...

  8. 项目笔记:导出Excel功能分sheet页插入数据

    导出Excel功能分sheet页处理数据: /*导出EXCEL*/ public void createExcel() { log.info("导出Excel功能已经启动-BEGIN&quo ...

  9. vue项目导出EXCEL功能

    因为一些原因导出EXCEL功能必须前端来做,所以就研究了一下,在网上也找了一些文章来看,有一些不完整,我做完了就记录下来,供大家参考: 1.首先先安装依赖: npm install file-save ...

随机推荐

  1. nekohtml转换html时标签变大写的问题

    public static Document transferByNeko(InputStream stream, String charset) { if (stream == null) retu ...

  2. hdu4711Weather 概率dp

    //第i个城市到第j个城市的概率ma[i][j] //第i天的天气天气wet[i] //第i个城市天气为j的概率wet_m[i][j] //Hovey从0点開始,找出其概率最大的路线 //dp[i][ ...

  3. 如何启动mininet实例上的wireshark图形界面

    启动wireshark 要启动mininet实例上的wireshark的图形界面,其实关键点只有两个: 保证宿主机上安装了X11 使用ssh -Y mininet@192.168.56.102 登录进 ...

  4. 基于AXI VDMA的图像采集系统

    基于AXI VDMA的图像采集系统 转载 2017年04月18日 17:26:43 标签: framebuffer / AXIS / AXI VDMA 2494 本课程将对Xilinx提供的一款IP核 ...

  5. 蓝桥杯第五届B组 李白打酒

    外面的小雨下着,风吹着,在实验室敲着代码 时隔一年之后再次做这道题,依然神一样的回溯出来: 标题:李白打酒 话说大诗人李白,一生好饮.幸好他从不开车. 一天,他提着酒壶,从家里出来,酒壶中有酒2斗.他 ...

  6. CCNA2.0笔记_ACL

    要点: 1.按顺序执行,一旦某条语句匹配,后续语句不再处理. 2.默认ACL 结尾语句是deny any,所以你要记住的是在ACL 里至少要有1 条permit 语句. 3.记得创建了ACL 后要把它 ...

  7. java printf long

    System.out.printf("%d\n", 1000000000000000000L); 

  8. PHP学习笔记(2)字符串函数

    注意: 1.双引号中可以解析变量 2.单引号中不会解析变量

  9. 使用心跳机制实现CS架构下多客户端的在线状态实时更新以及掉线自动重连

    此文讲述的内容是一个实际项目开发中的一部分内容,笔者将亲身经历写成文章. [背景] 现需要实现这样的功能:有多个客户端连着同一个服务器.服务器和客户端之间需要“互相”知道彼此的连接状态.比如在某一时刻 ...

  10. IPC之信号量

    无名信号量 POSIX标准提出了有名信号量和无名信号量来同步进程和线程,而linux(2.6以前)只实现了无名信号量. sem_overview中有详细介绍:man 7 sem_overview. S ...