当前位置: 首页 > news >正文

JXLS 导出多sheet,带页眉页脚

/*** 生成多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;
/*** 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

    @Data@AllArgsConstructorpublic static class SheetContext {/*** sheet name*/private String name;private Context context;}

调用:

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);

http://www.lryc.cn/news/233211.html

相关文章:

  • docker数据卷详细讲解及数据卷常用命令
  • 智能井盖传感器能不能监测井盖位移
  • .bashrc文件中环境变量配置错误,导致linux命令无法正常使用
  • HTML易忽略的角落【目录】
  • mysql8.0递归
  • 处理机器学习数据集中字符串列(pandas.get_dummies)
  • 一个UE无法注册的问题
  • 自媒体剪辑必备,6个音效素材网站,你值得拥有。
  • uniapp Android如何授权打开系统蓝牙Bluetooth?
  • 图论与网络优化2
  • ES Kibana windows 安装
  • 分布式事务seata的使用
  • 使用宝塔面板安装mysql
  • Flink 支持三种时间语义
  • 【大话Presto 】- 核心概念
  • 阎良区公益创投之“小飞机大梦想” 航模DIY主题活动
  • springBoot集成websocket实时消息推送
  • web:[BUUCTF 2018]Online Tool
  • 决策树的Boosting策略是什么
  • SQL Server中substring的用法
  • vscode设置latex
  • Django模板层
  • TP_Link WR886N 硬改闪存16M内存64M,刷入openwrt
  • websocket详解
  • 可以免费使用的设计素材网站分享
  • workman使用手册1.0
  • Cesium深入浅出之自定义材质
  • Appium移动自动化测试--安装Appium
  • 前端学习笔记--ES6
  • 冥想第九百七十八天