EasyPOI->非模版形式导出Excel(多Sheet)

在使用EasyPOI进行导出时,通常导出得都是单Sheet得Excel,代码可参考我的文章Easypoi导出excel

如需使用模版形式导出多sheet,可参考我的文章:EasyPOI->模版形式导出Excel(多Sheet)

如需要导出图片到excel可参考我的文章: Easypoi模版形式导出excel导出图片

有时候因为有其他需求,需要导出多Sheet时,可以参考如下代码:

注意:该文章给出的是非模版形式的多sheet导出excel

pom依赖:

        <!-- easypoi -->
        <dependency>
            <groupId>cn.afterturn</groupId>
            <artifactId>easypoi-base</artifactId>
            <version>3.2.0</version>
        </dependency>
        <dependency>
            <groupId>cn.afterturn</groupId>
            <artifactId>easypoi-annotation</artifactId>
            <version>3.2.0</version>
        </dependency>
        <dependency>
            <groupId>cn.afterturn</groupId>
            <artifactId>easypoi-web</artifactId>
            <version>3.2.0</version>
        </dependency>

导出源码:

@Controller
@RequestMapping(value = "easypoi")
public class EasypoiController {
 
   /**
     * 使用easypoi导出文件
     * 单sheet / 多sheet
     * @param response
     * @return
     */
    @RequestMapping(value="exportexceltest")
    @ResponseBody
    public String exportExcelTest(HttpServletResponse response){
        // 获取workbook对象
        // 单sheet或多sheet 只需要更改此处即可
        Workbook workbook = exportSheets() ;
        // 判断数据
        if(workbook == null) {
            return "fail";
        }
        // 设置excel的文件名称
        String excelName = "测试excel" ;
        // 重置响应对象
        response.reset();
        // 当前日期,用于导出文件名称
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
        String dateStr = "["+excelName+"-"+sdf.format(new Date())+"]";
        // 指定下载的文件名--设置响应头
        response.setHeader("Content-Disposition", "attachment;filename=" +dateStr+".xls");
        response.setContentType("application/vnd.ms-excel;charset=UTF-8");
        response.setHeader("Pragma", "no-cache");
        response.setHeader("Cache-Control", "no-cache");
        response.setDateHeader("Expires", 0);
        // 写出数据输出流到页面
        try {
            OutputStream output = response.getOutputStream();
            BufferedOutputStream bufferedOutPut = new BufferedOutputStream(output);
            workbook.write(bufferedOutPut);
            bufferedOutPut.flush();
            bufferedOutPut.close();
            output.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return "success";
    }

    public Workbook exportSheets(){
        // 查询数据,此处省略
        List list = new ArrayList<>();
        int count1 = 0 ;
        EasyPOIModel easyPOIModel11 = new EasyPOIModel(String.valueOf(count1++),"信科",new User("张三","男",20)) ;
        EasyPOIModel easyPOIModel12 = new EasyPOIModel(String.valueOf(count1++),"信科",new User("李四","男",17)) ;
        EasyPOIModel easyPOIModel13 = new EasyPOIModel(String.valueOf(count1++),"信科",new User("淑芬","女",34)) ;
        EasyPOIModel easyPOIModel14 = new EasyPOIModel(String.valueOf(count1++),"信科",new User("仲达","男",55)) ;
        list.add(easyPOIModel11) ;
        easyPOIModel11 = null ;
        list.add(easyPOIModel12) ;
        easyPOIModel12 = null ;
        list.add(easyPOIModel13) ;
        easyPOIModel13 = null ;
        list.add(easyPOIModel14) ;
        easyPOIModel14 = null ;
        List list1 = new ArrayList<>();
        int count2 = 0 ;
        EasyPOIModel easyPOIModel21 = new EasyPOIModel(String.valueOf(count2++),"软件",new User("德林","男",22)) ;
        EasyPOIModel easyPOIModel22 = new EasyPOIModel(String.valueOf(count2++),"软件",new User("智勇","男",28)) ;
        EasyPOIModel easyPOIModel23 = new EasyPOIModel(String.valueOf(count2++),"软件",new User("廉贞","女",17)) ;
        list1.add(easyPOIModel21) ;
        easyPOIModel21 = null;
        list1.add(easyPOIModel22) ;
        easyPOIModel22 = null;
        list1.add(easyPOIModel23) ;
        easyPOIModel23 = null;
        // 设置导出配置
        // 创建参数对象(用来设定excel得sheet得内容等信息)
        ExportParams params1 = new ExportParams() ;
        // 设置sheet得名称
        params1.setSheetName("表格1"); ;
        ExportParams params2 = new ExportParams() ;
        params2.setSheetName("表格2") ;
        // 创建sheet1使用得map
        Map dataMap1 = new HashMap<>();
        // title的参数为ExportParams类型,目前仅仅在ExportParams中设置了sheetName
        dataMap1.put("title",params1) ;
        // 模版导出对应得实体类型
        dataMap1.put("entity",EasyPOIModel.class) ;
        // sheet中要填充得数据
        dataMap1.put("data",list) ;
        // 创建sheet2使用得map
        Map dataMap2 = new HashMap<>();
        dataMap2.put("title",params2) ;
        dataMap2.put("entity",EasyPOIModel.class) ;
        dataMap2.put("data",list1) ;
        // 将sheet1和sheet2使用得map进行包装
        List<Map> sheetsList = new ArrayList<>() ;
        sheetsList.add(dataMap1);
        sheetsList.add(dataMap2);
        // 执行方法
        return ExcelExportUtil.exportExcel(sheetsList, ExcelType.HSSF) ;
    }
}

表格1得内容为:

 

 

表格2得内容为:

 

 

需要注意得是,在填充不同sheet中使用得data数据列表得时候,需要使用不同得list对象进行填充,如图框选部分所示:

如果填充不同sheet得data数据列表使用相同得list对象进行填充的话,会出现第一次填充得sheet有数据,后续其他使用相同list对象进行data填充得sheet没有数据展示。

代码如下:

表格1的内容与之前相同,但表格2中却是空的:

所以在使用时需要多加注意。

其他相关使用请参考原文章:https://gitee.com/jeecg/easypoi

 

 

 

如您有其他问题,希望可以通过留言得形式及时交流,有书写错误和可优化的地方也希望及时提出,感谢。

  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 18
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值