• JXLS 导出多sheet,带页眉页脚


    1. /**
    2. * 生成多sheet Excel
    3. * 带自定义页眉页脚
    4. *
    5. * @param templatePath
    6. * @param sheetList
    7. * @return
    8. * @throws IOException
    9. */
    10. public static byte[] generateMultiSheet(String templatePath, List sheetList) throws IOException {
    11. ByteArrayOutputStream baos = new ByteArrayOutputStream();
    12. //设置页眉页脚等布局
    13. try (InputStream is = new ClassPathResource(templatePath).getInputStream()) {
    14. XSSFWorkbook wb = new XSSFWorkbook(is);
    15. for (JxlsHelper2.SheetContext sheetContext : sheetList) {
    16. if (StringUtils.isEmpty(sheetContext.getName())) {
    17. continue;
    18. }
    19. XSSFSheet sheet = wb.getSheet(sheetContext.getName());
    20. if (sheet != null) {
    21. translateHeaderTemplate(sheet, sheetContext.getContext());
    22. }
    23. }
    24. wb.write(baos);
    25. //渲染数据
    26. ByteArrayOutputStream targetStream = new ByteArrayOutputStream();
    27. try (InputStream templateStream = new ByteArrayInputStream(baos.toByteArray())) {
    28. JxlsHelper2 jxlsHelper = JxlsHelper2.getInstance();
    29. Transformer transformer = jxlsHelper.createTransformer(templateStream, targetStream);
    30. jxlsHelper.processTemplate(sheetList, transformer);
    31. }
    32. return targetStream.toByteArray();
    33. }
    34. }

    重写 package org.jxls.util.JxlsHelper;
    1. /**
    2. * jx:area(lastCell="R3" multisheet ="sheets")
    3. *
    4. * @param sheetList
    5. * @param transformer
    6. * @throws IOException
    7. */
    8. public void processTemplate(List sheetList, Transformer transformer) throws IOException {
    9. areaBuilder.setTransformer(transformer);
    10. List xlsAreaList = areaBuilder.build();
    11. for (Area xlsArea : xlsAreaList) {
    12. String sheetName = xlsArea.getStartCellRef().getSheetName();
    13. Optional optional = sheetList.stream().filter(s -> Objects.equals(sheetName, s.getName())).findAny();
    14. if (optional.isPresent()) {
    15. xlsArea.applyAt(new CellRef(xlsArea.getStartCellRef().getCellName()), optional.get().getContext());
    16. }
    17. }
    18. if (processFormulas) {
    19. for (Area xlsArea : xlsAreaList) {
    20. setFormulaProcessor(xlsArea);
    21. xlsArea.processFormulas();
    22. }
    23. }
    24. if (isHideTemplateSheet()) {
    25. List sheetNameTemplate = getSheetsNameOfMultiSheetTemplate(xlsAreaList);
    26. for (String sheetName : sheetNameTemplate) {
    27. transformer.setHidden(sheetName, true);
    28. }
    29. }
    30. if (isDeleteTemplateSheet()) {
    31. List sheetNameTemplate = getSheetsNameOfMultiSheetTemplate(xlsAreaList);
    32. for (String sheetName : sheetNameTemplate) {
    33. transformer.deleteSheet(sheetName);
    34. }
    35. }
    36. transformer.write();
    37. }

    增加DTO

    1. @Data
    2. @AllArgsConstructor
    3. public static class SheetContext {
    4. /**
    5. * sheet name
    6. */
    7. private String name;
    8. private Context context;
    9. }

    调用:

    1. List sheetList = new ArrayList<>();
    2. Context context = new Context();
    3. for (String key : contextMap.keySet()) {
    4. context.putVar(key, contextMap.get(key));
    5. }
    6. sheetList.add(new JxlsHelper2.SheetContext("Sheet1", context));
    7. //
    8. Map contextMap2 = defaultExcelReportProvider.getContextMap("7777", "333", "测试", data);
    9. Context context2 = new Context();
    10. for (String key : contextMap2.keySet()) {
    11. context2.putVar(key, contextMap2.get(key));
    12. }
    13. sheetList.add(new JxlsHelper2.SheetContext("Sheet2", context2));
    14. byte[] bytes = JxlsUtil.generateMultiSheet(getExcelTemplatePath(), sheetList);

  • 相关阅读:
    HDLBits: 在线学习 SystemVerilog(七)-Problem 28-31
    开源语言大模型演进史:向LLaMA 2看齐
    python文字语音互转
    华为设备配置BFD多跳检测
    【MySQL】的存储过程
    网络安全-渗透测试
    java-php-python-ssm玉米生产力管理与分析平台计算机毕业设计
    【Python搜索算法】深度优先搜索(DFS)算法原理详解与应用,示例+代码
    Unity使用新输入系统InputSystem制作飞机大战Demo(实现能量系统)
    操作系统知识
  • 原文地址:https://blog.csdn.net/qiandeqiande/article/details/134413021