layui 使用EasyExcel进行模板填充,进行下载

Excel模板:

{xxx}属于Map填充,key对应xxx,value放入值。

{.xxx}(这里有个点)属于List填充,xxx对应List的值名称,如果是List<实体类>,xxx则对应实体类的属性

前端:

使用a标记作为链接下载

<script>
    function exportExcel(){//使用按钮点击进行下载
        var demoReload=$('#param').val();
        var url = '地址';
        //创建一个a标签进行下载
        var a = document.createElement('a');
        a.href = url+'?param='+demoReload+'&excel_id=1';
        $('body').append(a);  // 修复firefox中无法触发click
        a.click();
        $(a).remove();
        setTimeout(function(){
            layer.msg("导出结束", {
                icon:1,
                time:500
            },function(){
                window.location.reload();
            });
        }, 2000);
    }

</script>

后台:

controller只需要接收前端传来到参数,进行查询,放入List<实体类>里。

    @RequestMapping("/exportExcelEmpPayrollAccount")
    public void exportExcelEmpPayrollAccount(String param,Integer excel_id,         HttpServletResponse response) {
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("payrollName", param);
        //查询名称返回的结果
        List<EmpPayrollAccountVO> list = baseService.queryExceltLedger(param);
        excelTemplate.ExcelTemplate(excel_id, list, map, response);
    }
public void ExcelTemplate(Integer excel_id,List list, Map<String,Object> map, HttpServletResponse response){
        String name="";
        switch(excel_id){
            case 1:
                name="模板名称.xlsx";
                break;
            case 2:
                name="模板名称.xlsx";
                break;
            case 3:
                name="模板名称.xlsx";
                break;
            case 4:
                name="模板名称.xlsx";
                break;
            case 5:
                name="模板名称.xlsx";
                break;
        }
        String templateFileName=customConfig.getModelPath()+"\\"+name;//找到本地模板路径
        ExcelWriter excelWriter=null;
        try {
            String s=name.replaceAll(".xlsx","");
            String fileName = s + DateUtils.getDate();//导出的文件名称
            response.setContentType("application/vnd.ms-excel");
            response.setCharacterEncoding("utf-8");
            // 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
            String filename = URLEncoder.encode(fileName, "utf-8");
            response.setHeader("Content-disposition", "attachment;filename=" + filename + ".xls");
            //使用response.getOutputStream()下载,并使用项目下的模板填充
            excelWriter = EasyExcel.write(response.getOutputStream()).withTemplate(templateFileName).build();
            WriteSheet writeSheet = EasyExcel.writerSheet().build();
            if(map!=null){
                excelWriter.fill(map, writeSheet);//存入map
            }
            if(list!=null){
                excelWriter.fill(list, writeSheet);//存入list
            }
            excelWriter.finish();
        } catch (Exception e) {
            // 重置response
            response.reset();
            response.setContentType("application/json");
            response.setCharacterEncoding("utf-8");
            R<String> r = new R<>();
            r.setCode(CommonConstants.FAIL);
            r.setMsg("导出失败!");
            r.setData(e.getMessage());
            try {
                response.getWriter().println(r);
            } catch (IOException e1) {
                throw new NetException(500,"导出失败!");
            }
            throw new NetException(500,"导出失败!");
        }
    }

下载结果:

官方链接:EasyExcel

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值