本文讨论的是在使用jeecg、jeecgboot框架,或单独使用AutoPOI、Easy POI 导入导出组件情况下,数据格式为List
项目是一个类似决策支持系统(都是一些报表图表展示),采用了List
发现在复合表头时候,实现起来有些麻烦。复合表头指如下格式:
Controller中,配置如下。重点关注表头部分的代码,即 List
@RequestMapping(value = "/exportXls")
public ModelAndView exportXls(HttpServletRequest request, JeecgOrderMain jeecgOrderMain) {
//查询数据
List
模拟上述配置需要的数据,即上述代码中的queryData1(),如下:
/**
* 模拟数据查询
* @return List
问题是上述的数据结构,其实真是的数据只是复合表头,数据间还是一对一的数据,确切点没有设置数据间的关系,返回的就是List
/**
* 模拟数据查询
* @return List>
* */
public List> queryDate1(){
List> demoData = new ArrayList<>();
Map row1 = new HashMap();
row1.put("name", "张帅");
row1.put("sex", "男");
row1.put("age", "22");
row1.put("loverName", "韩美");
row1.put("loverAge", "23");
Map row2 = new HashMap();
row2.put("name", "张帅2");
row2.put("sex", "男");
row2.put("age", "32");
row2.put("loverName", "韩美2");
row2.put("loverAge", "33");
demoData.add(row1);
demoData.add(row2);
return demoData;
}
下载源码导入eclipse.
源码地址:https://github.com/zhangdaiscott/autopoi
修改源码地方一、ExcelExportEntity,增加一个属性
/**
* 当本对象中的ExcelExportEntity list属性有值且不为空时生效,说明对应 数据是否为List
*
* add by xugj
*
*/
private boolean isListData = true;
public boolean isListData() {
return isListData;
}
public void setListData(boolean isListData) {
this.isListData = isListData;
}
修改源码地方二、ExcelExportBase.java 中的createCells方法
修改完后执行mvn install,即可。
可以直接使用List
@RequestMapping(value = "/exportXls")
public ModelAndView exportXls(HttpServletRequest request, JeecgOrderMain jeecgOrderMain) {
//查询数据
List> demoData = queryDate1();
//导出Excel
ModelAndView mv = new ModelAndView(new JeecgMapExcelView());
// 导出文件名称
mv.addObject(MapExcelConstants.FILE_NAME, "Map导出多表头示例");
// 设置数据
mv.addObject(MapExcelConstants.MAP_LIST, demoData);
// 设置 ExportParams
mv.addObject(MapExcelConstants.PARAMS, new ExportParams("Map导出多表头示例", "testExp"));
// 设置表头样式
List filedsList = new ArrayList<>();
filedsList.add(new ExcelExportEntity("姓名", "name"));
filedsList.add(new ExcelExportEntity("性别", "sex"));
filedsList.add(new ExcelExportEntity("年龄", "age"));
ExcelExportEntity lover = new ExcelExportEntity("配偶","lover");
lover.setListData(false); // 这是重点
List loverFileds = new ArrayList<>();
loverFileds.add(new ExcelExportEntity("姓名","loverName"));
loverFileds.add(new ExcelExportEntity("年龄","loverAge"));
lover.setList(loverFileds);
filedsList.add(lover);
mv.addObject(MapExcelConstants.ENTITY_LIST, filedsList);
return mv;
}
改造完成,记录一下。