转自:http://t.zoukankan.com/pzw23-p-13354908.html

  • easyexcel导入获取表头并且表头为不固定列


    Controller

    @PostMapping("upload")@ResponseBodypublic HashMap<String, Object> upload(@RequestParam(value = "file") MultipartFile file,@RequestParam(value = "ztId") int ztId,@RequestParam(value = "qj") String qj,@RequestParam(value = "gzlbId") String gzlbId) throws IOException {gzdrService.init(ztId, qj, gzlbId);//生成uuidString uuid = UUID.randomUUID().toString();GzdrListener gzdrListener = new GzdrListener(ztId, gzdrService, uuid, qj, gzlbId);EasyExcel.read(file.getInputStream(), gzdrListener).sheet("导入模板").doReadSync();HashMap<String, Object> hashMap = new HashMap<>();List<String> errMessage = gzdrListener.getErrMessage();if (errMessage.isEmpty()) {hashMap.put("success", true);} else {hashMap.put("success", false);hashMap.put("errMessage", errMessage);}return hashMap;}

    GzdrListener 

    public class GzdrListener extends AnalysisEventListener<Map<Integer, String>> {/*** 每隔128条存储数据库,然后清理list ,方便内存回收*/private static final int BATCH_COUNT = 128;private int ztId;private List<String> errMessage;private GzdrService gzdrService;List<Map<Integer, String>> list = new ArrayList<Map<Integer, String>>();private String uuid;private String qj;private String gzlbId;public GzdrListener(int ztId, GzdrService gzdrService, String uuid, String qj, String gzlbId) {this.ztId = ztId;this.gzdrService = gzdrService;this.uuid = uuid;this.qj = qj;this.gzlbId = gzlbId;errMessage = new ArrayList<>();}@Overridepublic void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {logger.info("解析到一条头数据:{}, currentRowHolder: {}", headMap.toString(), context.readRowHolder().getRowIndex());list.add(headMap);}@Overridepublic void invoke(Map<Integer, String> data, AnalysisContext context) {logger.info("解析到一条数据:{}, currentRowHolder: {}", data.toString(), context.readRowHolder().getRowIndex());list.add(data);// 达到BATCH_COUNT了,需要去存储一次数据库,防止数据几万条数据在内存,容易OOMif (list.size() >= BATCH_COUNT) {errMessage.addAll(saveData());// 存储完成清理 listlist.clear();}}@Overridepublic void doAfterAllAnalysed(AnalysisContext context) {// 这里也要保存数据,确保最后遗留的数据也存储到数据库errMessage.addAll(saveData());logger.info("所有数据解析完成!");}/*** 加上存储数据库*/private List<String> saveData() {logger.info("{}条数据,开始存储数据库!,ztId:{}  ", list.size(), ztId);return gzdrService.save(list, ztId, uuid, qj, gzlbId);}public List<String> getErrMessage() {return errMessage;}public void setErrMessage(List<String> errMessage) {this.errMessage = errMessage;}public GzdrService getGzdrService() {return gzdrService;}public void setGzdrService(GzdrService gzdrService) {this.gzdrService = gzdrService;}private final static Logger logger = LoggerFactory.getLogger(GzdrListener.class);
    }
    
  • 原文地址:https://www.cnblogs.com/pzw23/p/13354908.html

easyexcel导入获取表头并且表头为不固定列相关推荐

  1. EasyExcel导入导出excel 复杂表头 表头校验 数据校验

    目录 EasyExcel特点 一.导入excel案例 二.读取excel的相关技术点 1.读取excel的方式 2.读取sheet数量 3.指定从第几行开始读数据 三.导出excel 1.前端发起请求 ...

  2. layui 复杂表头多层表头的表格数据非后台导出excel

    用过layui table的都了解,layui的表格自带导出功能,只要在属性toolbar里配置即可. 如果嫌toolbar里的导出按钮不够美观,layui也友好的提供了自行定义按钮后调用导出页面数据 ...

  3. easyExcel导入导出(列锁定单元格、表头合并、导出类型限制、锁定单元格增加底色、设置密码、隐藏列等)

    easyexcel官网文档:https://www.yuque.com/easyexcel/doc/easyexcel easyexcel {maven 版本} GitHub网址:https://gi ...

  4. easyExcel的复杂表头多级表头导入

    easyExcel导入相关 首先要了解 easyExcel怎么获取表头 直接贴代码就不废话了 下面导入文件一块的代码 有的人说 如果我是不固定的表头怎么办呢? 首先要了解 easyExcel怎么获取表 ...

  5. 使用EasyExcel导出表单表头-单层表头和多层表头

    一.导入pom <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</ ...

  6. SAP 获取采购订单表头长文本

    SAP 获取采购订单表头长文本 长文本不是直接存在某个table中,你在(me23n)可以双击该文本,然后选择菜单goto->header,查看该文本的技术信息,然后通过function mod ...

  7. springboot+easyexcel实现固定表头+动态表头的数据导出

    /*** 固定标头的实体类*/ @Data public class BaseExportExcelStringVo implements Serializable {private static f ...

  8. EasyExcel导入导出下载模板(带下拉)

    EasyExcel导入导出网上资料很多,这里就不多做描述了,总之就是一款比较轻而小,易用的excel操作工具包:这里在项目中使用到,做下笔记.以及表格中下拉框的实现: 声明:本文思路是借鉴于某大神的, ...

  9. easyExcel导入表格

    easyExcel导入表格 本文章是介绍java,通过easyExcel导入较为复杂的表格 导入表格如下 前提工作导包 <!-- hutool--><dependency>&l ...

最新文章

  1. 路由器NAT网络地址转换
  2. MySQL federated 引擎跨服务器使用实例
  3. requireJS文件夹
  4. MySQL 性能优化技巧(一)
  5. telnet实现本地回显
  6. 实战:Redis 哨兵模式(下)
  7. java文件编译为class文件需要键入什么命令_cmd命令行 编译Java 文件
  8. 【CDH】ClouderaManager集群报警,堆转储目录/tmp 或日志目录/var/log 可用空间小于 5.0 吉字节
  9. Linux 安装Eclipse
  10. [Oracle SQL]最基本的connect by的用法
  11. mbedtls交换服务器证书,mbedtls | 07 - DH秘钥协商算法的配置与使用
  12. CS5463代码模块解析(包含下载链接)
  13. 通过 SQL Server 视图访问另一个IP地址数据库服务器表的方法
  14. STM32F103C8T6定时器
  15. CJSON 使用介绍
  16. Java爬取网页数据
  17. 计算机课艺术字四周型怎么弄,Word.文档中艺术字环绕方式四周型怎么设置
  18. mybatis关系映射之一对多和多对一
  19. 《程序员升职记》8.零保护行动
  20. 音频单通道转双通道算法

热门文章

  1. php网站https怎么做301,php网站如何增加https安全访问
  2. 服务器系统怎么写,服务器操作系统语言写的
  3. mysql 5.5 udf_MYSQL5漏洞之udf提权
  4. hashtable允许重复吗_在单位缴职工医保,老家有居民医保,能同时报销吗?相关部门这样回应...
  5. OpenShift 4 Hands-on Lab (0) - 教程说明和准备环境
  6. Linux Mint 20.1 “Ulyssa” 将于 12 月中旬发布
  7. Orleans 3.0 发布,微软下一代云计算编程模式
  8. 使用EntityFramework Core和Enums作为字符串的ASP.NET Core Razor页面——第二部分
  9. php百度鹰眼,Android 百度鹰眼里程计算简单实列
  10. 用计算机来弹一首少年,辽宁省锦州市2018年中考语文试卷(word版,含答案)