Java Excel 导出多个 sheet

1.实体类-GoodVV


import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;

@Data
public class GoodVV {

    @ExcelProperty(value = "商品编号")
    private String goodsCode;

    @ExcelProperty(value = "商品名称")
    private String goodsName;
}


2.实体类-TtVV


import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;

@Data
public class TtVV {

    @ExcelProperty(value = "操作人")
    private String operationName;

    @ExcelProperty(value = "操作时间")
    private String operationDate;

    @ExcelProperty(value = "数据明细数量(条)")
    private Integer size;

    @ExcelProperty(value = "商品编号")
    private String goodsCode;

    @ExcelProperty(value = "商品名称")
    private String goodsName;
}


3.控制层


    /**
     * 导出商品
     * @param response 响应
     */
    @GetMapping("/exportGoods")
    @ApiOperation(value = "商品列表导出", httpMethod = "GET")
    @Permission(level = ResourceLevel.ORGANIZATION, permissionLogin = true)
    public void exportGoods(HttpServletResponse response) throws Exception {
        exportService.exportGoods(response);
    }


4.接口层


    /**
     * 导出商品列表
     * @param response 响应体
     */
    void exportGoods(HttpServletResponse response) throws Exception;


    
    
5.实现层


 /**
     * 模板导出商品列表
     * @param response 响应体
     */
    @Override
    public void exportGoods(HttpServletResponse response) throws Exception {
        //创建容器
        List<GoodVV> list = new ArrayList<>();
        for (int i=0;i<=59;i++){
            GoodVV vv = new GoodVV();
            vv.setGoodsName("商品名称"+i);
            vv.setGoodsCode("商品编号"+i);
            list.add(vv);
        }
        TtVV vo = new TtVV();
        vo.setGoodsName("商品");
        vo.setGoodsCode("商品");
        vo.setOperationName("你大爷");
        vo.setOperationDate(SDF.format(new Date()));
        vo.setSize(list.size());

        String template = ExcelTemplateEnum.TEMPLATE_PATH.getDesc() + File.separator +  ExcelTemplateEnum.TEMPLATE_7.getDesc() + ExcelTemplateEnum.TEMPLATE_SUFFIX.getDesc();
        InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream(template);
        ExcelWriter excelWriter = EasyExcelFactory.write(getOutputStream( ExcelTemplateEnum.TEMPLATE_7.getDesc(), response)).withTemplate(inputStream).build();
        FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build();
        WriteSheet writeSheet0 = EasyExcelFactory.writerSheet(0).build();
        WriteSheet writeSheet1 = EasyExcelFactory.writerSheet(1).build();
        excelWriter.fill(vo,fillConfig, writeSheet0);
        excelWriter.fill(list, writeSheet1);
        excelWriter.finish();
    }

    /**
     * 构建输出流
     * @param fileName:文件名称
     * @param response:
     * @return
     * @throws Exception
     */
    private OutputStream getOutputStream(String fileName, HttpServletResponse response) throws Exception {
        fileName = URLEncoder.encode(fileName, StandardCharsets.UTF_8.name());
        response.setContentType("application/vnd.ms-excel");
        response.setCharacterEncoding(StandardCharsets.UTF_8.name());
        response.setHeader("Content-Disposition", "attachment;filename=" + fileName + ExcelTemplateEnum.TEMPLATE_SUFFIX.getDesc());
        return response.getOutputStream();
    }

6.模板示意

7.效果示意

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值