easyexcel导入获取表头并且表头为不固定列
转自: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导入获取表头并且表头为不固定列相关推荐
- EasyExcel导入导出excel 复杂表头 表头校验 数据校验
目录 EasyExcel特点 一.导入excel案例 二.读取excel的相关技术点 1.读取excel的方式 2.读取sheet数量 3.指定从第几行开始读数据 三.导出excel 1.前端发起请求 ...
- layui 复杂表头多层表头的表格数据非后台导出excel
用过layui table的都了解,layui的表格自带导出功能,只要在属性toolbar里配置即可. 如果嫌toolbar里的导出按钮不够美观,layui也友好的提供了自行定义按钮后调用导出页面数据 ...
- easyExcel导入导出(列锁定单元格、表头合并、导出类型限制、锁定单元格增加底色、设置密码、隐藏列等)
easyexcel官网文档:https://www.yuque.com/easyexcel/doc/easyexcel easyexcel {maven 版本} GitHub网址:https://gi ...
- easyExcel的复杂表头多级表头导入
easyExcel导入相关 首先要了解 easyExcel怎么获取表头 直接贴代码就不废话了 下面导入文件一块的代码 有的人说 如果我是不固定的表头怎么办呢? 首先要了解 easyExcel怎么获取表 ...
- 使用EasyExcel导出表单表头-单层表头和多层表头
一.导入pom <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</ ...
- SAP 获取采购订单表头长文本
SAP 获取采购订单表头长文本 长文本不是直接存在某个table中,你在(me23n)可以双击该文本,然后选择菜单goto->header,查看该文本的技术信息,然后通过function mod ...
- springboot+easyexcel实现固定表头+动态表头的数据导出
/*** 固定标头的实体类*/ @Data public class BaseExportExcelStringVo implements Serializable {private static f ...
- EasyExcel导入导出下载模板(带下拉)
EasyExcel导入导出网上资料很多,这里就不多做描述了,总之就是一款比较轻而小,易用的excel操作工具包:这里在项目中使用到,做下笔记.以及表格中下拉框的实现: 声明:本文思路是借鉴于某大神的, ...
- easyExcel导入表格
easyExcel导入表格 本文章是介绍java,通过easyExcel导入较为复杂的表格 导入表格如下 前提工作导包 <!-- hutool--><dependency>&l ...
最新文章
- 路由器NAT网络地址转换
- MySQL federated 引擎跨服务器使用实例
- requireJS文件夹
- MySQL 性能优化技巧(一)
- telnet实现本地回显
- 实战:Redis 哨兵模式(下)
- java文件编译为class文件需要键入什么命令_cmd命令行 编译Java 文件
- 【CDH】ClouderaManager集群报警,堆转储目录/tmp 或日志目录/var/log 可用空间小于 5.0 吉字节
- Linux 安装Eclipse
- [Oracle SQL]最基本的connect by的用法
- mbedtls交换服务器证书,mbedtls | 07 - DH秘钥协商算法的配置与使用
- CS5463代码模块解析(包含下载链接)
- 通过 SQL Server 视图访问另一个IP地址数据库服务器表的方法
- STM32F103C8T6定时器
- CJSON 使用介绍
- Java爬取网页数据
- 计算机课艺术字四周型怎么弄,Word.文档中艺术字环绕方式四周型怎么设置
- mybatis关系映射之一对多和多对一
- 《程序员升职记》8.零保护行动
- 音频单通道转双通道算法
热门文章
- php网站https怎么做301,php网站如何增加https安全访问
- 服务器系统怎么写,服务器操作系统语言写的
- mysql 5.5 udf_MYSQL5漏洞之udf提权
- hashtable允许重复吗_在单位缴职工医保,老家有居民医保,能同时报销吗?相关部门这样回应...
- OpenShift 4 Hands-on Lab (0) - 教程说明和准备环境
- Linux Mint 20.1 “Ulyssa” 将于 12 月中旬发布
- Orleans 3.0 发布,微软下一代云计算编程模式
- 使用EntityFramework Core和Enums作为字符串的ASP.NET Core Razor页面——第二部分
- php百度鹰眼,Android 百度鹰眼里程计算简单实列
- 用计算机来弹一首少年,辽宁省锦州市2018年中考语文试卷(word版,含答案)