之前在项目中会用到在Java在后台把数据填入Word文档的模板来提供前台下载,为了自己能随时查看当时的实现方案及方便他人学习我写了这篇博客,访问量已经是我写的博客里第一了。于是乎我在学会用Java在后台利用Apache poi 生成excel文档提供前台下载之后就想着来写一篇姊妹篇啦。
在生成Excel文档的时候我采用了和生成Word时的不同方法,Apache poi。它是用Java编写的免费开源的跨平台的 Java API,提供API给Java程式对Microsoft Office格式档案读和写的功能。想要实现这个功能,就按照下面的步骤来做吧,为了方便起见,我直接拿项目中遇到的实例来举例说明,是的,我在写这篇博客的时候同时也在完成手上的项目。
step1:创建xls格式的模板
表头含有我的甲方信息就打码了,可以看到我搞了一个空的模板文件,现在有很多东西需要在后台填入
step2:前台触发事件
搞一个按钮,用户点击的时候用JavaScript的window.location.href将页面重定向到你处理下载的URL去
比方说,这是我项目的前台,看到那个表面质量按钮吗,来看一下当它被点击的时候调用的函数
function exportBatch() { //get请求,可以传递参数,比方说我这里就传了一堆卷号,我只生成传过去的这堆卷号的检验记录 //参数rollNumbers的细节就不展示了,业务相关 window.location.href = '../ir/exportSurface?rollNumberList=' + rollNumbers; }
有朋友可能想用什么Ajax来发送请求,我反正是没搞出来,挺麻烦的,网上找的相关解决方案也都比较蛋疼,因此不传什么复杂的敏感的参数,就这么写就可以。
step3:后台处理
首先你当然要把Apache poi那一套东西引入你的项目啦,我的项目是Maven项目,添加依赖很容易
<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.14</version> </dependency>
然后,为了方便导出Excel,在项目中建了一个ExcelUtils工具类,后面给出源码,这么一来导出Excel会变得更简单。ExcelUtils里面除了一些既定的方法外,还有就是你具体怎么去操作模板的方法了。当然你用的少的话可以不用我这工具类,而是在你需要的时候import相关的类,然后在你处理的时候就把操作模板的逻辑写进去也可以。但我这个项目很多次用到导出Excel,所以抽象出一个工具类是很有必要的,符合设计模式。
我的项目是基于SpringMVC的,来看看我后台接收到请求以后做了些什么吧
Controller:
/*** * 批量导出表面质量检验记录 * * @return * @throws Exception */ @RequestMapping(value = "exportSurface", method = RequestMethod.GET) @ResponseBody public void exportSurface(HttpServletRequest request, HttpServletResponse response) throws Exception { //参数获取及处理,业务相关不展示 //把要填写的数据放在一个map里 Map<String, Object> map = new HashMap<String, Object>(); map.put("sequence", "0001");//mock编号 map.put("date", DateUtils.toDateStr(new Date(), DateUtils.DEFAULT_DATE_PATTERN_CHINESE)); map.put("chetaihao", "1#");//mock车台号 map.put("productName", "预应力钢绞线");//mock品名 map.put("specification", "规格");//mock规格 map.put("memo", "备注");//mock备注 map.put("inspectRecordBizList", inspectRecodeBizList); ExcelUtils.exportInspectionRecordSurface(request, response, map); }
新闻热点
疑难解答