Easy Excel导出一个表格多个Sheet

步骤:

1.查找官方API文档理解实现

2.实现融入到代码里面

一:Easy Excel重复多次写入(写到单个或者多个Sheet)

重复多次写入(写到单个或者多个Sheet)

Easy Excel导出一个表格多个Sheet_第1张图片

Easy Excel导出一个表格多个Sheet_第2张图片

 理解重点:

// 每次都要创建writeSheet 这里注意必须指定sheetNo 第几个sheetNo 而且sheetName:sheet名字必须不一样。head设置表头,这里注意DemoData.class 可以每次都变,我这里为了方便 所以用的同一个class
// 实际上可以一直变
WriteSheet writeSheet = EasyExcel.writerSheet(i, "模板" + i).head(DemoData.class).build();
// 分页去数据库查询数据 这里可以去数据库查询每一页的数据
List data = data();
//表格写入对应sheet的数据
excelWriter.write(data, writeSheet);

二:实现

目的:我要创建一个表格两个sheet

步骤:

1.数据:第一个sheet页的数据.,第二个sheet页的数据

3.创建一个表格ExcelWriter,写入对应sheet的数据代码:

代码模板:

  /**
     * 导出
     *
     * @param response
     * @param dto      筛选条件
     */
    @Override
    public void export(HttpServletResponse response, DspSmsInfoDTO dto) throws IOException {
        //1.第一个Sheet页数据
        List smsDeptStatisticsList = this.statisticsDeptSms(dto);
        //构建分页信息
        Query query = new Query();
        query.setCurrent(1);
        query.setSize(Integer.MAX_VALUE);
        //1.第二个Sheet页数据
        LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
        //返回实体page
        IPage page = page(Condition.getPage(query), queryWrapper);
        IPage pageVO = DspSmsInfoWrapper.build().pageVO(page);
        List records = pageVO.getRecords();
        //2.处理为导出数据类
        List itemList = records.stream().map(o -> BeanUtil.copy(o, SmsExcelVO.class)).collect(Collectors.toList());
        List list = smsDeptStatisticsList.stream().map(o -> BeanUtil.copy(o, SmsDeptStatisticsExcelVo.class)).collect(Collectors.toList());
        //3.返回信息
        response.setContentType("application/vnd.ms-excel");
        response.setCharacterEncoding(Charsets.UTF_8.name());
        String fileName = "消息统计";
        response.setHeader("Content-disposition", "attachment;filename=" + URLEncoder.encode(fileName, Charsets.UTF_8.name()) + ".xlsx");
        //将数据写入sheet页中
        ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).build();
        WriteSheet writeSheet1 = EasyExcel.writerSheet(0, "发送统计").head(SmsDeptStatisticsExcelVo.class).registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).build();
        WriteSheet writeSheet2 = EasyExcel.writerSheet(1, "发送明细").head(SmsExcelVO.class).registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).build();
        excelWriter.write(list, writeSheet1);
        excelWriter.write(itemList, writeSheet2);
        excelWriter.finish();
        response.flushBuffer();
    }

导出效果:

Easy Excel导出一个表格多个Sheet_第3张图片

你可能感兴趣的:(easyExcel,java)