iis服务器助手广告
返回顶部
首页 > 资讯 > 后端开发 > JAVA >EasyExcel动态头导出
  • 812
分享到

EasyExcel动态头导出

javaeasyexcel 2023-08-23 09:08:39 812人浏览 薄情痞子
摘要

前言 这段时间的项目中需要导出动态表格。 根据所选的参数导出对应的字段内容 下图所示选择下面几个tab页就需要导出对应的表头字段 下面为具体实现的效果。表头样式可以通过Easyexcel 提供的方法自定义。 具体实现 主要是通过 传

前言

这段时间的项目中需要导出动态表格。
根据所选的参数导出对应的字段内容
在这里插入图片描述

下图所示选择下面几个tab页就需要导出对应的表头字段
在这里插入图片描述

下面为具体实现的效果。表头样式可以通过Easyexcel 提供的方法自定义。
在这里插入图片描述


具体实现

主要是通过 传入 exportItem 这个条件来决定导出的事项。

下附实现代码

public boolean export(QueryBO queryBo) throws CustomException {    List<Integer> exportItem = queryBo.getExportItem();    List<BankAccountOverviewVO> bankAccountOverviewList =        accountOverviewList(queryBo, new PageInfoVo());    // 动态创建表头    List<List<String>> headList = new ArrayList<>();    // 组装数据    List<List<Object>> dataList = new ArrayList<>();    // 表头合并的逻辑    List<CellRangeAddress> cellRangeAddressList = new ArrayList<>();    // 组装账户信息总览 导出数据    builidAccountOverviewExportData(        exportItem, bankAccountOverviewList, headList, dataList, cellRangeAddressList);    String fileName = "信息总览.xlsx";// 调用EasyExcel 方法输出文件流    try {      httpservletResponse response = ServletUtils.getResponse();      response.setContentType("application/msexcel;charset=utf-8");      response.setHeader(          "content-disposition", "attachment; filename=" + URLEncoder.encode(fileName, "utf-8"));      OutputStream out = response.getOutputStream();      EasyExcel.write(out)          .head(headList) // 设置表头数据          .reGISterWriteHandler(new SimpleColumnWidthStyleStrategy(25)) // excel 样式设置          .autoCloseStream(Boolean.TRUE) // 自动关闭文件流          .sheet("信息总览")          .doWrite(dataList); // 数据list      // 开始导出    } catch (Exception e) {      LoggerUtils.error(e.getMessage());      return false;    }    return true;  }

数据组装方法

builidAccountOverviewExportData

主要实现的原理是通过List exportItem 来判断需要导出的tab块。

其中使用了 getapiModelName(OverviewBankBookOcceVO.class); 方法映射对象的字段名进行快捷组装。

private void builidAccountOverviewExportData(      List<Integer> exportItem,      List<BankAccountOverviewVO> bankAccountOverviewList,      List<List<String>> headList,      List<List<Object>> dataList,      List<CellRangeAddress> cellRangeAddressList) {    // --------------表头拼接-------------    // 账户信息    List<String> bankBookHead = new ArrayList<>();    bankBookHead.add("企业主体编码");    bankBookHead.add("企业主体名称");    for (String head : bankBookHead) {      List<String> bankBookHeadTitle = new ArrayList<>();      bankBookHeadTitle.add(head);      headList.add(bankBookHeadTitle);    }// 字段下标!!!!!!!!!!    int index = 13;    if (CollectionUtils.isNotEmpty(exportItem)) {      // 账面发生额      if (exportItem.contains(BankAccountOverviewExportTypeEnum.BANK_BOOK_OCCE.getValue())) {        List<String> apiModelNameList = getApiModelName(OverviewBankBookOcceVO.class);        for (String apiModelName : apiModelNameList) {          List<String> bankBookOccHeadTitle = new ArrayList<>();          bankBookOccHeadTitle.add("账面发生额");          bankBookOccHeadTitle.add(apiModelName);          headList.add(bankBookOccHeadTitle);        }        //      // 需要合并的表头位置  (起始行,结束行,起始列,结束列)        //      int size = apiModelNameList.size();        //      CellRangeAddress cellRangeAddress = new CellRangeAddress(0, 0, index, index + size -        // 1);        //      cellRangeAddressList.add(cellRangeAddress);        //      index += size;      }      // 发生额调节表      if (exportItem.contains(BankAccountOverviewExportTypeEnum.OCC_ADJUSTMENT.getValue())) {        List<String> apiModelNameList = getApiModelName(OverviewOccAdjustmentVO.class);        for (String apiModelName : apiModelNameList) {          List<String> occAdjustmentInfoHeadTitle = new ArrayList<>();          occAdjustmentInfoHeadTitle.add("发生额调节表");          occAdjustmentInfoHeadTitle.add(apiModelName);          headList.add(occAdjustmentInfoHeadTitle);        }      }      // 网银流水      if (exportItem.contains(BankAccountOverviewExportTypeEnum.EBANK_FLOW.getValue())) {        List<String> apiModelNameList = getApiModelName(OvervieWEBankFlowVO.class);        for (String apiModelName : apiModelNameList) {          List<String> ebankFlowHeadTitle = new ArrayList<>();          ebankFlowHeadTitle.add("网银流水");          ebankFlowHeadTitle.add(apiModelName);          headList.add(ebankFlowHeadTitle);        }      }      // 核对余额      if (exportItem.contains(BankAccountOverviewExportTypeEnum.RECONCILE_BALANCE.getValue())) {        List<String> apiModelNameList = getApiModelName(OverviewReconcileBalanceVO.class);        for (String apiModelName : apiModelNameList) {          List<String> reconcileBalancesHeadTitle = new ArrayList<>();          reconcileBalancesHeadTitle.add("核对余额");          reconcileBalancesHeadTitle.add(apiModelName);          headList.add(reconcileBalancesHeadTitle);        }        // 需要合并的表头位置  (起始行,结束行,起始列,结束列)        int size = apiModelNameList.size();        CellRangeAddress cellRangeAddress = new CellRangeAddress(0, 0, index, index + size - 1);        cellRangeAddressList.add(cellRangeAddress);        index += size;      }      // 双向核对结果      if (exportItem.contains(BankAccountOverviewExportTypeEnum.CHECK_RESULT.getValue())) {        List<String> apiModelNameList = getApiModelName(OverviewCheckResultVO.class);        for (String apiModelName : apiModelNameList) {          List<String> checkResultHeadTitle = new ArrayList<>();          checkResultHeadTitle.add("双向核对结果");          checkResultHeadTitle.add(apiModelName);          headList.add(checkResultHeadTitle);        }      }    }    // ----------------组装数据-------------    for (BankAccountOverviewVO bankAccountOverview : bankAccountOverviewList) {      List<Object> data = new ArrayList<>();      // 账户信息总览      data.add(bankAccountOverview.getCompanyId());      data.add(bankAccountOverview.getCompanyName());      String checkPlanFlag = bankAccountOverview.getCheckPlanFlag();      if (StringUtils.isNotEmpty(checkPlanFlag)) {        checkPlanFlag = checkPlanFlag.replaceAll("0", "是");        checkPlanFlag = checkPlanFlag.replaceAll("1", "否");      }      data.add(checkPlanFlag);      data.add(bankAccountOverview.getNoCheckReason());      // -------动态表格数据组装-----      if (CollectionUtils.isNotEmpty(exportItem)) {        // 账面发生额        if (exportItem.contains(BankAccountOverviewExportTypeEnum.BANK_BOOK_OCCE.getValue())) {          data.add(bankAccountOverview.getBankBookOccInfo().getOpenBalance());          data.add(bankAccountOverview.getBankBookOccInfo().getCurrentIssueAdd());          data.add(bankAccountOverview.getBankBookOccInfo().getCurrentIssueReduce());          data.add(bankAccountOverview.getBankBookOccInfo().getBalance());          data.add(bankAccountOverview.getBankBookOccInfo().getOpenBalanceF());          data.add(bankAccountOverview.getBankBookOccInfo().getCurrentIssueAddF());          data.add(bankAccountOverview.getBankBookOccInfo().getCurrentIssueReduceF());          data.add(bankAccountOverview.getBankBookOccInfo().getBalanceF());        }        // 发生额调节表        if (exportItem.contains(BankAccountOverviewExportTypeEnum.OCC_ADJUSTMENT.getValue())) {          data.add(bankAccountOverview.getOccAdjustmentInfo().getCurrentIssueAdd());          data.add(bankAccountOverview.getOccAdjustmentInfo().getCurrentIssueReduce());        }        // 网银流水        if (exportItem.contains(BankAccountOverviewExportTypeEnum.EBANK_FLOW.getValue())) {          data.add(bankAccountOverview.getEbankFlowInfo().getOpenBalance());          data.add(bankAccountOverview.getEbankFlowInfo().getCurrentIssueAdd());          data.add(bankAccountOverview.getEbankFlowInfo().getCurrentIssueReduce());          data.add(bankAccountOverview.getEbankFlowInfo().getBalance());        }        // 核对余额        if (exportItem.contains(BankAccountOverviewExportTypeEnum.RECONCILE_BALANCE.getValue())) {          data.add(bankAccountOverview.getReconcileBalances().getBalanceVerify());          data.add(bankAccountOverview.getReconcileBalances().getDebitOccFVerify());          data.add(bankAccountOverview.getReconcileBalances().getCreditOccFVerify());          data.add(bankAccountOverview.getReconcileBalances().getNetAmountVerify());        }        // 双向核对结果        if (exportItem.contains(BankAccountOverviewExportTypeEnum.CHECK_RESULT.getValue())) {          data.add(bankAccountOverview.getCheckResult().getDebitOccF());          data.add(bankAccountOverview.getCheckResult().getCreditOccF());          data.add(bankAccountOverview.getCheckResult().getDebitRatio());          data.add(bankAccountOverview.getCheckResult().getCreditRatio());          data.add(bankAccountOverview.getCheckResult().getUntreatedProject());          data.add(bankAccountOverview.getCheckResult().getExceptionProject());        }      }      dataList.add(data);    }  }

getApiModelName 方法代码如下,因为项目引入了 swagger 所以数据接口对象都会使用到 @ApiModelProperty 注解 如下图所示。通过反射获取实体类的对应属性的注解名称list。

@Data@ApiModel(value = "vo对象", description = "vo对象")public class OverviewBankBookOcceVO {  @ApiModelProperty(value = "银行账号")  private String bankAccount;  @ApiModelProperty("期初余额(原币)")  private BigDecimal openBalance;}
  private List<String> getApiModelName(Object object) {    Class<T> aClass = (Class<T>) object;    Field[] fields = aClass.getDeclaredFields();    List<String> apiModelName = new ArrayList<>();    for (Field field : fields) {      ApiModelProperty annotation = field.getAnnotation(ApiModelProperty.class);      String value = annotation.value();      if (field.getName().equals("bankAccount")) {        continue;      }      apiModelName.add(value);    }    return apiModelName;  }

本文由 SoGeek_Studio 发布,有任何问题请留言评论,欢迎指正。

来源地址:https://blog.csdn.net/Harswlgb/article/details/130411747

--结束END--

本文标题: EasyExcel动态头导出

本文链接: https://www.lsjlt.com/news/378445.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • EasyExcel动态头导出
    前言 这段时间的项目中需要导出动态表格。 根据所选的参数导出对应的字段内容 下图所示选择下面几个tab页就需要导出对应的表头字段 下面为具体实现的效果。表头样式可以通过EasyExcel 提供的方法自定义。 具体实现 主要是通过 传...
    99+
    2023-08-23
    java easyexcel
  • Java怎么用EasyExcel解析动态表头并导出
    本文小编为大家详细介绍“Java怎么用EasyExcel解析动态表头并导出”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java怎么用EasyExcel解析动态表头并导出”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知...
    99+
    2023-07-04
  • Java利用EasyExcel解析动态表头及导出实现过程
    目录前言参考地址前端下载模板下载EasyExcel动态表头解析EasyExcel动态表头导出总结前言 excel文件导入及导出,是日常开发中经常遇到的需求。本次笔者以EasyExce...
    99+
    2022-12-08
    easyexcel导出表头格式 easyexcel解析动态表头 java easyexcel动态表头
  • Java——使用EasyExcel导出动态列的Excel
    有些时候列表的列可能是动态的,需要根据动态表头导出Excel文件,这时候可以使用下面的方法解决: public static void exportDynamicExcel(Set includeColumnFiledNam...
    99+
    2023-09-09
    java excel
  • EasyExcel导出Excel文件
    导出Excel 方法一 导入EasyExcel依赖 com.alibaba easyexcel 创建实体类 @Data@AllArgsConstructor@NoArgsConstruc...
    99+
    2023-10-20
    excel java 开发语言
  • 使用EasyExcel模版导出
    一、官方提供方法 easyexcel官方文档 填充Excel | Easy Excel 官方demo是利用本地模版文件填充并下载到本地 @Test public void complexFill() { ...
    99+
    2023-09-01
    excel java 后端
  • java使用EasyExcel导入导出excel
    目录一、准备工作 1、导包二、了解注解 1、常用注解2、@ExcelProperty注解 3、@ColumnWith注解 4、@ContentFontStyle注解 5、@Conte...
    99+
    2024-04-02
  • Java easyExcel的复杂表头多级表头导入
    目录首先要了解下面导入文件一块的代码有的人说 如果我是不固定的表头怎么办呢?总结首先要了解 easyExcel怎么获取表头 直接贴代码就不废话了 import com.alibab...
    99+
    2024-04-02
  • Spring Boot + EasyExcel实现数据导入导出
    目录背景SpringBoot项目集成依赖集成实体类实现业务逻辑实现MemberService实现简单导出实现自定义导入实现同步获取结果导入实现基于监听导入实现小结背景 老项目主要采用...
    99+
    2022-11-13
    Spring Boot 数据导入导出 EasyExcel数据导入导出
  • 使用EasyExcel实现Excel的导入导出
    文章目录 前言一、EasyExcel是什么?二、使用步骤1.导入依赖2.编写文件上传配置3.配置表头对应实体类4.监听器编写5.控制层6.前端代码 总结 前言 在真实的开发者场景中,经常会使用excel作为数据的载体,进行...
    99+
    2023-08-17
    java
  • Java easyExcel的多级表头怎么导入
    这篇文章主要介绍了Java easyExcel的多级表头怎么导入的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java easyExcel的多级表头怎么导入文章都会有所收获,下面我们一起来看...
    99+
    2023-07-02
  • java如何使用EasyExcel导入导出excel
    这篇文章主要介绍了java如何使用EasyExcel导入导出excel,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、准备工作1、导包<!-- poi&nb...
    99+
    2023-06-15
  • EasyExcel实现excel导出(多sheet)
    EasyExcel官方地址: EasyExcel官方文档 - 基于Java的Excel处理工具 | Easy ExcelEasyExcel是一个基于Java的、快速、简洁、解决大文件内存溢出的Excel处理工具。他能让你在不用考虑性能、内存...
    99+
    2023-09-03
    java 开发语言 spring boot
  • JAVA(EasyExcel)通过远程调用模板 导出数据 复杂表头
    前言 最近接手一个需求,单组数据的显示,也有多组数据的显示,查了好多文章,都不是很明白.但是这篇文章和我的需求差不多非常相似(链接放在文末),根据这篇文章然后将自己的实现过程记录了下来,以防之后再用到. 这是我需要导出的excel格式开头是...
    99+
    2023-09-24
    java excel vue.js
  • Java+EasyExcel实现文件的导入导出
    目录引言效果图项目结构核心源码核心实体类核心监听器类EasyExcel导入文件EasyExcel导出文件引言 项目中需要Excel文件的导入与导出Excel并下载,例如,导入员工信息...
    99+
    2024-04-02
  • SpringBoot整合EasyExcel实现文件导入导出
    目录准备工作 1. 引入pom依赖2. 实现功能 Excel文件下载 3. 日志实体类4. 接口和具体实现 Excel文件导入 5. 文件读取配置 6. 读取测试7. 附上自定义属性...
    99+
    2024-04-02
  • EasyExcel实现Excel文件导入导出功能
    一、EasyExcel简介 Java领域解析、生成Excel比较有名的框架有Apache poi、jxl等。但他们都存在一个严重的问题就是非常的耗内存。如果你的系统并发量不大的话可能还行,但是一旦并发上来后一定会OOM或者JVM频繁的fu...
    99+
    2023-09-15
    excel java Powered by 金山文档
  • Java easyexcel使用教程之导出篇
    目录EasyExcel简介1、导入Maven依赖2、新建Student.java类3、generateStudentUtil.java类,随机生成Student对象4、BaseTes...
    99+
    2024-04-02
  • SpringBoot整合EasyExcel实现导入导出数据
    目录前言1.前端2.数据库3.后端3.1 contrller3.2 mapper3.3 bean3.4 listener3.5 config3.6 配置文件4.启动测试前言...
    99+
    2024-04-02
  • Java+EasyExcel如何实现文件的导入导出
    这篇文章将为大家详细讲解有关Java+EasyExcel如何实现文件的导入导出,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。引言项目中需要Excel文件的导入与导出Excel并下载,例如,导入员工信息,导...
    99+
    2023-06-22
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作