基于Easy-poi实现多Sheet页以及动态表头的excel表格的导出

需求描述

生成包含多个Sheet页的Excel表格,并且每个Sheet的表头是动态的。

设计方案

一个workBook可以分为多个Sheet页,每一个Sheet页面又可以分为title,entity,data 3个部分。
在这里插入图片描述

详解

title:是一个ExportParams类实例,可以用于设置sheet页名和表格名

ExportParams userExportParams = new ExportParams("明细","方案1");

结果:方案1为Sheet页名,明细为表格最上面一行的题目。
在这里插入图片描述
entity:表头,可以是一个类,也可以是一个List。
动态表头需要生成一个List;静态表头可以使用对类加注解的方式。

ExcelExportEntity entity1 =  new ExcelExportEntity("姓名","name");
ExcelExportEntity entity1 =  new ExcelExportEntity("年龄","age"); 
ExcelExportEntity entity1 =  new ExcelExportEntity("班级","class");  
entityList.add(entity1);

data:表格中的数据,一个List<Map<K,V>>。
表格中的每一行数据都是一个Map<K,V>,多行数据就成了一个List。

dataMap.put("name""张三");
dataMap.put("age""17");
dataMap.put("class""高三1班");

Sheet:一个有固定Key值的Map<String,Object>。
多个Sheet页可以用一个List<Map<String,Object>>来进行存储。

sheetMap.put("title", userExportParams );
sheetMap.put("entityList", entityList);
sheetMap.put("data", dataMap);

注意:“title”,“entityList”,"data"等key值是固定不变的,不能进行改动,每个Sheet页都必须包含这三个元素。

输出

可以输出到磁盘文件,也可以输出到二进制流。

//输出到文件
        Workbook workbook = new HSSFWorkbook();
        for(Map<String,Object> map : sheetList) {
            ExcelExportService server = new ExcelExportService();
            ExportParams param = (ExportParams) map.get("title");
            @SuppressWarnings("unchecked")
            List<ExcelExportEntity> entity = (List<ExcelExportEntity>) map.get("entityList");
            Collection<?> data = (Collection<?>) map.get("data");
            server.createSheetForMap(workbook, param, entity, data);
        }
        File targetFile = new File("D:\\excel\\temp.xls");
        FileOutputStream fos = new FileOutputStream(targetFile);
        workbook.write(fos);
        fos.close();
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值