Java带模板的Excel导出

带模板的Excel导出

// 前面需要查询的列表数据和对象数据
public void getExport(QueryVo params, HttpServletResponse response) {
        log.info("日志打印信息:{}", params);
        try{
            List<Info> infos = singleService.getInfoExport(params);
            ExportTemplate exportTemplate = coverExportTemplate(params);
            ExportTemplateUtils.dataExportForExcelTemplate("info", "示例表.xlsx", infos, exportTemplate, response);
        }catch (Exception e){
            log.error("示例表导出问题:", e);
            e.printStackTrace();
        }
    }
//具体的导出方法
/**
     * 带模板的excel导出
     * @param templateName  用到的excel模板名称
     * @param fileName  导出文件名称
     * @param datas 导出数据列表集合List
     * @param object  导出数据对象Object
     * @param response
     */
    public static <T>void dataExportForExcelTemplate(String templateName, String fileName, List datas, T object, HttpServletResponse response) {
        if(CollectionUtils.isEmpty(datas) && Objects.isNull(object)){
            throw new RuntimeException("数据为空,不能导出!");
        }
        ExcelWriter excelWriter = null;
        InputStream template = null;
        try {
            template = new ClassPathResource("excelTemplate/"+ templateName + ".xlsx").getInputStream();
            if(template.available() == 0){
                log.info("下载文件路径:" + downloadexcelPath + templateName + ".xlsx");
                template = new FileInputStream(downloadexcelPath + templateName + ".xlsx");
            }
            if(template.available() == 0){
                log.error("获取" + templateName + "模板失败!");
                throw new RuntimeException("获取" + templateName + "模板失败,报表导出失败!");
            }
            response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
            response.setCharacterEncoding("UTF-8");
            response.setHeader("content-disposition","attachment;filename*=utf-8''"+ URLEncoder.encode(fileName, "UTF-8").replaceAll("\\+", "%20") + ".xlsx");
            excelWriter = EasyExcel.write(response.getOutputStream()).withTemplate(template).build();
            WriteSheet writeSheet = EasyExcel.writerSheet().build();
            FillConfig fillConfig = FillConfig.builder().direction(WriteDirectionEnum.VERTICAL).forceNewRow(true).build();
            //列表数据填充
            if(!CollectionUtils.isEmpty(datas)){
                excelWriter.fill(new FillWrapper("data", datas), fillConfig, writeSheet);
            }
            //其他数据填充
            if(Objects.nonNull(object)){
                excelWriter.fill(object, writeSheet);
            }
        }catch (Exception e){
            log.error("导出失败:",e);
        } finally {
            if(excelWriter!=null){
                excelWriter.finish();
            }
            if(template != null){
                try {
                    template.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

你可能感兴趣的:(Java,Java,excel)