JXLS 导出多sheet,带页眉页脚

java 复制代码
    /**
     * 生成多sheet Excel
     * 带自定义页眉页脚
     *
     * @param templatePath
     * @param sheetList
     * @return
     * @throws IOException
     */
    public static byte[] generateMultiSheet(String templatePath, List<JxlsHelper2.SheetContext> sheetList) throws IOException {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        //设置页眉页脚等布局
        try (InputStream is = new ClassPathResource(templatePath).getInputStream()) {
            XSSFWorkbook wb = new XSSFWorkbook(is);
            for (JxlsHelper2.SheetContext sheetContext : sheetList) {
                if (StringUtils.isEmpty(sheetContext.getName())) {
                    continue;
                }
                XSSFSheet sheet = wb.getSheet(sheetContext.getName());
                if (sheet != null) {
                    translateHeaderTemplate(sheet, sheetContext.getContext());
                }
            }
            wb.write(baos);
            //渲染数据
            ByteArrayOutputStream targetStream = new ByteArrayOutputStream();
            try (InputStream templateStream = new ByteArrayInputStream(baos.toByteArray())) {
                JxlsHelper2 jxlsHelper = JxlsHelper2.getInstance();
                Transformer transformer = jxlsHelper.createTransformer(templateStream, targetStream);
                jxlsHelper.processTemplate(sheetList, transformer);

            }

            return targetStream.toByteArray();
        }
    }
复制代码
重写 package org.jxls.util.JxlsHelper;
java 复制代码
    /**
     * jx:area(lastCell="R3" multisheet ="sheets")
     *
     * @param sheetList
     * @param transformer
     * @throws IOException
     */
    public void processTemplate(List<SheetContext> sheetList, Transformer transformer) throws IOException {
        areaBuilder.setTransformer(transformer);
        List<Area> xlsAreaList = areaBuilder.build();
        for (Area xlsArea : xlsAreaList) {
            String sheetName = xlsArea.getStartCellRef().getSheetName();
            Optional<SheetContext> optional = sheetList.stream().filter(s -> Objects.equals(sheetName, s.getName())).findAny();
            if (optional.isPresent()) {
                xlsArea.applyAt(new CellRef(xlsArea.getStartCellRef().getCellName()), optional.get().getContext());
            }
        }
        if (processFormulas) {
            for (Area xlsArea : xlsAreaList) {
                setFormulaProcessor(xlsArea);
                xlsArea.processFormulas();
            }
        }
        if (isHideTemplateSheet()) {
            List<String> sheetNameTemplate = getSheetsNameOfMultiSheetTemplate(xlsAreaList);
            for (String sheetName : sheetNameTemplate) {
                transformer.setHidden(sheetName, true);
            }
        }
        if (isDeleteTemplateSheet()) {
            List<String> sheetNameTemplate = getSheetsNameOfMultiSheetTemplate(xlsAreaList);
            for (String sheetName : sheetNameTemplate) {
                transformer.deleteSheet(sheetName);
            }
        }
        transformer.write();
    }

增加DTO

java 复制代码
    @Data
    @AllArgsConstructor
    public static class SheetContext {
        /**
         * sheet name
         */
        private String name;
        private Context context;
    }

调用:

java 复制代码
            List<JxlsHelper2.SheetContext> sheetList = new ArrayList<>();
            Context context = new Context();
            for (String key : contextMap.keySet()) {
                context.putVar(key, contextMap.get(key));
            }
            sheetList.add(new JxlsHelper2.SheetContext("Sheet1", context));

            //
            Map<String, Object> contextMap2 = defaultExcelReportProvider.getContextMap("7777", "333", "测试", data);
            Context context2 = new Context();
            for (String key : contextMap2.keySet()) {
                context2.putVar(key, contextMap2.get(key));
            }
            sheetList.add(new JxlsHelper2.SheetContext("Sheet2", context2));
            byte[] bytes = JxlsUtil.generateMultiSheet(getExcelTemplatePath(), sheetList);
相关推荐
Chen-Edward14 分钟前
有了Spring为什么还有要Spring Boot?
java·spring boot·spring
陈小桔1 小时前
idea中重新加载所有maven项目失败,但maven compile成功
java·maven
小学鸡!1 小时前
Spring Boot实现日志链路追踪
java·spring boot·后端
xiaogg36781 小时前
阿里云k8s1.33部署yaml和dockerfile配置文件
java·linux·kubernetes
逆光的July2 小时前
Hikari连接池
java
微风粼粼2 小时前
eclipse 导入javaweb项目,以及配置教程(傻瓜式教学)
java·ide·eclipse
番茄Salad2 小时前
Spring Boot临时解决循环依赖注入问题
java·spring boot·spring cloud
天若有情6732 小时前
Spring MVC文件上传与下载全面详解:从原理到实战
java·spring·mvc·springmvc·javaee·multipart
祈祷苍天赐我java之术2 小时前
Redis 数据类型与使用场景
java·开发语言·前端·redis·分布式·spring·bootstrap
Olrookie3 小时前
若依前后端分离版学习笔记(二十)——实现滑块验证码(vue3)
java·前端·笔记·后端·学习·vue·ruoyi