在java开发中我们经常会涉及到导出excel的操作,但是太多这样的操作的话我们一个一个的写就太麻烦,代码冗余多到不行,我们可以利用poi来写一些工具类实现公用的excel导出,我们使用java反射可以实现实体和excel列对应的导出,但是有时候我们不需要那么多的字段,所以有了以下工具类:
同样是居于poi,源码简单明了,实现也简单:
这个工具类的优势:
操作简单,代码量少,参数少
实现动态数据的导出(可以带参数到数据库查询出一个list,把list中的实体数据导出)
不会保存文件到服务器(减少垃圾文件的产生,减轻服务器的压力),直接下载到客户端(访问页面的电脑)
我把包传到了资源文件中点击下面的链接去下载
前提:下载写好的工具类
下载地址:点击打开链接
如果没有poi包可以自行下载
下载地址:点击打开链接 这个包里面我们只需要导入一个poi.jar包到你项目的lib下就可以了,其他的都不需要
下面我们就开始操作了
1.将util中的java文件放到你自己的项目包中
2.下面开始编写导出exce的方法,这个方法是一个conntroller中的方法,我们可以在上面加上requestMapping来实现页面调用,其实就是下载
@ResponseBody
@RequestMapping(value="cpkValFromParam.action")
public void cpkValFromParam(CpkVal cpkval,HttpServletRequest request,HttpServletResponse response){
String fileName = "标题";//文件标题
List<CpkVal> cpkvalList = outPutForExcelService.listCpkValForExcell(cpkval);//定义一个map集合 由于存取excel表格需要展示的数据信息
LinkedHashMap<String, List<?>> map = new LinkedHashMap<String, List<?>>();
map.put(fileName, cpkvalList);//将文件标题和数据放到
mapList<String[]> fieldNames = new ArrayList<String[]>();
fieldNames.add(new String[] { "createTime","xxx"});//要导出的实体中的字段名称,必须和实体中的属性对应
//打印的excel表格 列名
Map<String, String[]> moreColumns = new LinkedHashMap<String, String[]>();
moreColumns.put("编号", new String[]{"编号"});
moreColumns.put("时间", new String[]{"时间"});
moreColumns.put("excel中的列名", new String[]{"excel中的列名"}); //开始调用工具类中的方法
ExcelExportData setInfo = new ExcelExportData(); setInfo.setDataMap(map);//设置数据
setInfo.setFieldNames(fieldNames);//设置列明
setInfo.setTitles(new String[] {fileName}); //excel表格头部加入查询数据的日期起始值
setInfo.setExportExcelDate("2017-10-10");//设置导出日期,显示在文件标题的下方,可以不要
setInfo.setMoreColumns(moreColumns); //导出
FileDownloadUtils.exportFile(request,response, setInfo, fileName);}
}
3.我们在页面上调用这个requestMapping里面的链接,也可以直接用a标签
<a href="/地址前缀/cpkValFromParam.action">导出excel</a>
ok,完成了
我们在页面上点击这个导出excel的时候,进入后台查询数据,把list中的数据写入excel并下载