1.概况
背景:SSM框架下的maven管理项目
需求:将datagrid前端展示的表格导出为Excel文件
插件:easypoi(现成的轮子)
备注:此方法只要引入插件,并且有获取datagrid的数据源方法就足够完成了,导出的样式是单sheet非模板的Excel表格。
2.实现
整体思路:
1.引入插件jar包
2.前台页面添加导出按钮和点击事件
3.后台导出处理:
1)两个List,一个是你的datagrid数据源,一个是与数据源对应,用于导出设置的泛型ExcelExportEntity的List
2)进行各种设置后就可以导出啦!
1)pom.xml文件引入easypoi依赖
<!-- easyPoi -->
<dependency>
<groupId>org.jeecg</groupId>
<artifactId>easypoi-base</artifactId>
<version>2.4.0</version>
</dependency>
<dependency>
<groupId>org.jeecg</groupId>
<artifactId>easypoi-web</artifactId>
<version>2.4.0</version>
</dependency>
<dependency>
<groupId>org.jeecg</groupId>
<artifactId>easypoi-annotation</artifactId>
<version>2.4.0</version>
</dependency>
2)前台页面添加导出表格按钮和按钮点击事件
按钮:
<a id='export'>导出表格</a>
事件:
$('#export').on('click',function(){
if($('#dg').datagrid('getData').total == 0){
return;
}else{
window.location='<%=basePath%>export/exportExcel';
}
});
其中dg是要导出的datagrid的id,window.location后面跟的是导出表格的controller访问地址。
3)编写后台controller
@RequestMapping("/exportExcel")
public String dataExport(ModelMap modelMap) {
try {
List<ExcelExportEntity> entityList = new ArrayList<ExcelExportEntity>();
entityList.add(new ExcelExportEntity("列1", "column1",40));//参数依次为(excel列名,结果集list的map主键,excel单元格宽度)
entityList.add(new ExcelExportEntity("列2", "column2",25));
entityList.add(new ExcelExportEntity("列3", "column3",25));
entityList.add(new ExcelExportEntity("列4", "column4",25));
entityList.add(new ExcelExportEntity("列5", "column5",25));
List<Map<String, Object>> dataResult = (获取你datagrid数据的方法)
modelMap.put(MapExcelConstants.ENTITY_LIST, entityList);//放入你的excel列表设置
modelMap.put(MapExcelConstants.MAP_LIST, dataResult);//放入你的datagrid数据结果列表
modelMap.put(NormalExcelConstants.PARAMS, new ExportParams("我是文件标题",""));
modelMap.put(MapExcelConstants.FILE_NAME, "我是文件名",""));
return MapExcelConstants.JEECG_MAP_EXCEL_VIEW;
}catch(Exception e) {
this.logger.error(e.getMessage());
}
return NormalExcelConstants.JEECG_EXCEL_VIEW;
}
将表格内容导出,实际上是再次请求表格查询的方法,并把结果集导出;
上面用到两个列表:entityList和dataResult,entityList用的都是easypoi封装好的方法,主要是对导出后excel的列设置;dataResult是你的表格结果集,字段要与entityList设置的column1,column2...对应。
最终导出结果如图~
3.碎碎念
每次接触到没做过的模块都免不了头大,到处搜资料导出碰钉子哈,但往往实现后才发现根本不是这么复杂呀hhhh,做这个模块的时候我先引入的poi的依赖,又引入了easypoi的依赖,结果jar包冲突解决了半天...引入easypoi就已经包括poi的包了,毕竟是现成的轮子了,不过做之前我确实没这个概念?
多sheet模板导出可以参考我的这篇文章:poi实现列表导出多sheet模板excel文件