动态表头excel导入(java)
动态表头excel导入
1. 导入依赖并设置实体
首先配置poi版本相关的maven属性
<properties><poi.version>4.1.2</poi.version> </properties>
配置文件中使用Apache poi,Alibaba-easyexcel相关的依赖。
<dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.1.6</version><exclusions><exclusion><groupId>org.apache.poi</groupId><artifactId>poi</artifactId></exclusion><exclusion><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>${poi.version}</version></dependency>
动态读取的表单实体类内容
@Builder @Data @TableName("t_form_template") public class FormTemplate {@TableId(type = IdType.AUTO)private Long id;//表头名称private String formTitle;//表名private String formName;//是否可为空private Boolean isBlank;//规定的数据类型private String dataType;//规定的字段的长度private String dataNum;private String valueType;//字段默认值private String defaultText;private String defaultPrompt;//字段的排序private String formSort;private String remarks;@ApiModelProperty(value = "创建时间")@TableField(fill = FieldFill.INSERT)@JsonFormat(shape = JsonFormat.Shape.STRING, pattern="yyyy-MM-dd HH:mm:ss")private LocalDateTime createTime;@TableField(exist=false)@JsonFormat(shape = JsonFormat.Shape.STRING, pattern="yyyy-MM-dd HH:mm:ss")private LocalDateTime createTimeBegin;@TableField(exist=false)@JsonFormat(shape = JsonFormat.Shape.STRING, pattern="yyyy-MM-dd HH:mm:ss")private LocalDateTime createTimeEnd;@ApiModelProperty(value = "更新时间")@TableField(fill = FieldFill.INSERT_UPDATE)@JsonFormat(shape = JsonFormat.Shape.STRING, pattern="yyyy-MM-dd HH:mm:ss")private LocalDateTime updateTime;}
2. 数据解析
- 这里使用每10条数据为批次,进行存储数据库操作,实际使用中可以更大批次进行数据处理。
- 使用esayExcel的相关函数对数据进行批次解析。
- 过程为:解析数据->找到对应字段->对数据进行保存。
private static final int BATCH_COUNT = 10;List<Map<Integer, String>> list = new ArrayList<Map<Integer, String>>();@Overridepublic void invoke(Map<Integer, String> data, AnalysisContext context) {log.info("解析到一条数据:{}", JSON.toJSONString(data));list.add(data);if (list.size() >= BATCH_COUNT) {saveData();list.clear();}}@Overridepublic void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {log.info("解析到一条头数据:{}", JSON.toJSONString(headMap));list.add(headMap);}@Overridepublic void doAfterAllAnalysed(AnalysisContext context) {saveData();log.info("所有数据解析完成!");}
3.存入数据库
储存操作
private void saveData() {log.info("{}条数据,开始存储数据库!", list.size());log.info("{}输出list!!!",list);//注意这里调用自己的保存方法signupUserinfoService.saveAll(list);log.info("存储数据库成功!");}
批量保存函数
- 原理是对获得的list转为map对象,并且进行循环插入数据库。
@Overridepublic void saveAll(List<Map<Integer, String>> list) {Map<Integer, String> map = list.get(0);for (int i = 1; i < list.size(); i++) {//行数Map<Integer, String> map1 = list.get(i);int code = refFormUserService.selectMaxCode() + 1;for (int j = 0; j < map.size(); j++) {//列数SignupUserinfo signupUserinfo = new SignupUserinfo();FormTemplate formTemplate = formTemplateService.selectFormTemplate(signupId, map.get(j));log.info("{}j的大小", map.get(j));signupUserinfo.setFormName(formTemplate.getFormName());signupUserinfo.setFormTitle(map.get(j));signupUserinfo.setFormValue(map1.get(j));signupUserinfoService.saveOrUpdate(signupUserinfo);signupUserinfo.setFormId(formTemplate.getId());signupUserinfo.setCode(String.valueOf(code));signupUserinfo.setFormUserId(signupUserinfo.getId());refFormUserService.insertByUserInfo(signupUserinfo);}}}
动态表头excel导入(java)相关推荐
- 动态表头excel导出(java)
动态表头excel导出 1. 导入依赖并设置实体 首先配置poi版本相关的maven属性 <properties><poi.version>4.1.2</poi.vers ...
- 【飞秋】ASP.NET 之 常用类、方法的超级总结,并包含动态的EXCEL导入导出功能,奉上类库源码
最近闲了,花点几天时间将项目中常用的一些类.方法做了一下总结,希望对大家有用. 实用类:UtilityClass 包含如下方法 判断对象是否为空或NULL,如果是空或NULL返回true,否则返回fa ...
- java 动态表头_java如何生成可变表头的excel
本文为大家分享了java生成可变表头excel的具体步骤,供大家参考,具体内容如下 1.实现功能: 传入一个表头和数据,将数据导入到excel中. 为了便于项目的扩展,数据传入通过泛型集合传入,获取数 ...
- java 动态导入excel_javaweb之动态读取 excel,导入excel
因为项目需求用到excel导入功能,技术有限花了很多时间终于弄出来了.借鉴了别人的方法,分享给有需要的人. 之前在搜索后看了很多人的方法,但是和我实际的需求不符合. 有什么问题或者改良 可以联系我qq ...
- java Excel导入导出工具类 及使用demo
java Excel导入导出工具类 及使用demo 前言:相信进来的都是想尽快解决问题的,话不多说,按照以下步骤来,可以操作导出excel到本地,导入同理,自行学习.步骤一:直接复制以下excel工具 ...
- Java实现Excel导入导出操作详解
前言 本次封装是基于 POI 的二次开发,最终使用只需要调用一个工具类中的方法,就能满足业务中绝大部门的导入和导出需求. 1. 功能测试 1.1 测试准备 在做测试前,我们需要將[2. 环境准备]中的 ...
- Java动态生成excel模板文件(包含列下拉)
1.添加依赖 <!-- https://mvnrepository.com/artifact/org.apache.poi/poi --> <dependency><gr ...
- Java后端:10w行级别数据的Excel导入优化记录
一些细节 数据导入:导入使用的模板由系统提供,格式是 xlsx (支持 65535+行数据) ,用户按照表头在对应列写入相应的数据 数据校验:数据校验有两种: 字段长度.字段正则表达式校验等,内存内校 ...
- java excel导入校验_excel导入前校验
问题描述: 遇到客户提出过问题,能否在导入前对导入的excel内容进行校验,满足条件后才能导入到报表中. 解决思路: 在导入excel中首先要将excel的数据读入到报表文件中的excelReport ...
最新文章
- Python:urllib2模块Handler处理器 和 自定义Opener
- DWZ(J-UI)整合百度编辑器(UEditor)
- 程序员会成为非常内卷的职业吗?
- 问题记录之用poi生成图片并插入到word时,图片中的中文显示不出来
- 怎么在网页中调用netmeeting使用阿?
- Silverlight DataGrid超出列表高度时自动滚屏
- 怎样让友情链接更加有效果
- Android插件化开发基础之Java反射机制研究
- ClassNotFoundException:是否减慢了您的JVM?
- mysql字段编码转换_mysql字符集编码转换
- builtins.TypeError: sequence item 0: expected a bytes-like object, str found
- 用Swift完成不同View Controller之间的切换
- linux对文件属性及权限操作的一些基本命令
- 使用pt-query-digest,找到不是很合适的sql
- 全新卡盟系统PHP版 集成易支付_PHP全新授权系统支持盗版入库卡密授权
- 英语快照1---英语正能量
- 成长计划校园极客秀|基于OpenHarmony的智能阳台
- 【UV打印机】RYPC打印软件教程(三)-参数设置
- PHP验证身份证类(包含香港身份证校验)
- 一款客服系统有哪些必备的功能模块?