最近做的一个项目用到了Excel导入,我选择了使用easypoi进行Excel解析。

1.前期准备

如果使用maven等项目管理工具,在配置文件pom.xml中,添加以下三个依赖:

  <dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-base</artifactId><version>3.0.3</version></dependency><dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-web</artifactId><version>3.0.3</version></dependency><dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-annotation</artifactId><version>3.0.3</version></dependency>

如果没使用项目管理工具,在build path中导入三个jar包

image.png

2.业务流程

客户下载Excel模板----->客户填写Excel上传----->解析Excel----->将数据持久化存储(录入数据库)----->查询操作,将数据显示在数据表格

Excel模板:

image.png

填写后的Excel:

image.png

3.效果预览

layer.gif

可以看见,我们在Excel中录入的名称为hello和world的数据已经录入数据库了。

4.代码实现

前端使用layui(别的前端UI框架也可以 使用文件上传功能即可):

<div class="layui-btn-container"><a class="layui-btn btn-add btn-default" id="btn-excel">选择Excel文件</a>&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;<a class="layui-btn btn-add btn-default" id="btn-excel-sure">上传导入</a>
</div>layui.use(['upload'], function() {var  $ = layui.jquery;var upload = layui.upload;
}layui.use(['element', 'form', 'table', 'layer', 'vip_table', 'laydate','upload'], function() {var form = layui.form,table = layui.table,layer = layui.layer,vipTable = layui.vip_table,element = layui.element,$ = layui.jquery;var laydate = layui.laydate;var upload = layui.upload;//Excel导入upload.render({elem: '#btn-excel',url: 'layer/excelparser?fileName=1',auto: false//,multiple: true,bindAction: '#btn-excel-sure',size: 2048 //最大允许上传的文件大小 2M,accept: 'file' //允许上传的文件类型,exts:'xlsx'//只上传pdf文档,done: function(res){console.log(res)if(res.code == 1){//成功的回调//do something (比如将res返回的图片链接保存到表单的隐藏域)// $('#set-add-put input[name="fileName"]').val(res.data.fileName);layer.msg(res.msg, {icon: 6});location.reload();}else if(res.code==2){layer.msg(res.msg, {icon: 5});}}});
});

这里使用layui实现上传下载的组件,并对返回结果进行回调,状态码1成功,2失败

后台:
Controller层:

 /*** 处理Excel解析的方法* @param file 前台上传的文件对象* @return*/@RequestMapping(value = "Index/layer/excelparser")@ResponseBodypublic   Map<String,Object> Excel(HttpServletRequest request,@RequestParam("file")MultipartFile file)throws Exception{Map<String, Object> dataMap = new HashMap<String, Object>();String fileName1 = request.getParameter("fileName");// 设置文件名,根据业务需要替换成要下载的文件名String fileName;try {//上传目录地址String uploadDir = request.getSession().getServletContext().getRealPath("/") +"upload/";uploadDir=uploadDir.substring(0,uploadDir.length()-1);uploadDir=uploadDir+"\\";//下载目录String realPath=uploadDir+fileName1;//File dir = new File(realPath);if(!dir.exists()){dir.mkdir();}//调用上传方法fileName=upload.executeUpload1(uploadDir, file,fileName1);uploadDir=uploadDir.substring(0,uploadDir.length()-1);dataMap.put("fileName",fileName);dataMap.put("dir",uploadDir);}catch (Exception e){//打印错误堆栈信息e.printStackTrace();return api.returnJson(2,"解析失败",dataMap);}ExcelParser(fileName);return api.returnJson(1,"解析成功",dataMap);}public void ExcelParser(String fileName)throws Exception{ImportParams params = new ImportParams();params.setTitleRows(1);params.setHeadRows(1);long start = new Date().getTime();List<Layer> list=new ArrayList<>();list = upload.importExcel("C:/Users/sl/Desktop/layer/layer/src/main/webapp/upload/"+fileName, 1, 1, Layer.class);System.out.println(new Date().getTime() - start);System.out.println(list.size());System.out.println(list);int testId=1;int isInsert=0;for (int i = 0; i <list.size() ; i++) {Layer layer=new Layer();UUID uuid=UUID.randomUUID();String layerId=uuid.toString();layer.setLayerId(layerId);layer.setLayerName(list.get(i).getLayerName());layer.setDescription(list.get(i).getDescription());layer.setRecordTime(list.get(i).getRecordTime());layer.setReleaseTime(list.get(i).getReleaseTime());int is_add=layerService.InsertLayer(layer);System.out.println(is_add);}
}

用到的工具类:Upload.java

package com.example.sl.layer.util;import cn.afterturn.easypoi.excel.ExcelImportUtil;
import cn.afterturn.easypoi.excel.entity.ImportParams;
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.multipart.MultipartFile;import java.io.File;
import java.util.List;
import java.util.UUID;//上传
public class Upload {public  String executeUpload1(String uploadDir,MultipartFile file,String fileName) throws Exception{//文件后缀名String suffix = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));//上传文件名String filename = fileName + suffix;//服务器端保存的文件对象File serverFile = new File(uploadDir + filename);//将上传的文件写入到服务器端文件内file.transferTo(serverFile);return filename;}public  <T> List<T> importExcel(String filePath, Integer titleRows, Integer headerRows, Class<T> pojoClass){if (StringUtils.isBlank(filePath)){return null;}ImportParams params = new ImportParams();params.setTitleRows(titleRows);params.setHeadRows(headerRows);List<T> list = null;try {list = ExcelImportUtil.importExcel(new File(filePath), pojoClass, params);}catch (Exception e) {e.printStackTrace();}return list;}public  <T> List<T> importExcel(MultipartFile file, Integer titleRows, Integer headerRows, Class<T> pojoClass){if (file == null){return null;}ImportParams params = new ImportParams();params.setTitleRows(titleRows);params.setHeadRows(headerRows);List<T> list = null;try {list = ExcelImportUtil.importExcel(file.getInputStream(), pojoClass, params);} catch (Exception e) {e.printStackTrace();}return list;}}

model层实体类:(这里使用easypoi的注解解析,对时间等特殊格式也加上解析即可)

package com.example.sl.layer.model;import cn.afterturn.easypoi.excel.annotation.Excel;
import cn.afterturn.easypoi.excel.annotation.ExcelTarget;
import com.fasterxml.jackson.annotation.JsonFormat;import java.util.Date;@ExcelTarget("Layer")
public class Layer {private String layerId;@Excel(name = "法规名称", isImportField = "true_st")private String layerName;@Excel(name = "法规描述", isImportField = "true_st")private String description;@Excel(name = "法规发布日期",importFormat = "yyyy-MM-dd")private Date releaseTime;@Excel(name = "法规上传日期",importFormat = "yyyy-MM-dd")private Date recordTime;private String fileName;public String getLayerId() {return layerId;}public void setLayerId(String layerId) {this.layerId = layerId == null ? null : layerId.trim();}public String getLayerName() {return layerName;}public void setLayerName(String layerName) {this.layerName = layerName == null ? null : layerName.trim();}public String getDescription() {return description;}public void setDescription(String description) {this.description = description == null ? null : description.trim();}public Date getReleaseTime() {return releaseTime;}public void setReleaseTime(Date releaseTime) {this.releaseTime = releaseTime;}public Date getRecordTime() {return recordTime;}public void setRecordTime(Date recordTime) {this.recordTime = recordTime;}public String getFileName() {return fileName;}public void setFileName(String fileName) {this.fileName = fileName == null ? null : fileName.trim();}
}

dao层:

package com.example.sl.layer.dao;import com.example.sl.layer.model.Layer;
import org.apache.ibatis.annotations.Param;import java.util.Date;
import java.util.List;public interface LayerMapper {int insert(Layer record);
}

Service层:
LayerService:

package com.example.sl.layer.service;import com.example.sl.layer.model.Layer;import java.util.Date;
import java.util.List;public interface LayerService {public int InsertLayer(Layer layer);}

LayerServiceImpl:

package com.example.sl.layer.service;import com.example.sl.layer.dao.LayerMapper;
import com.example.sl.layer.model.Layer;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;import javax.annotation.Resource;
import java.util.Date;
import java.util.List;@Service("layerService")
@Transactional
public class LayerServiceImpl implements LayerService{@Resourceprivate LayerMapper layerMapper;@Overridepublic int InsertLayer(Layer layer) {return layerMapper.insert(layer);}
}

5.最终实现

layer.gif

image.png

image.png

解析成功,并且入库。

喜欢就给颗小吧。

easypoi实现Excel导入相关推荐

  1. SpringBoot集成EasyPoi实现Excel导入导出

    作者介绍: 本人Java特工,代号:Cris Li : 中文名:克瑞斯理 简书地址: 消失的码农 - 简书 CSDN地址: https://blog.csdn.net/jianli95 个人纯洁版博客 ...

  2. 使用Easypoi实现Excel导入导出

    EayPoi官方文档 1.Excel的导出 这是我刚开始工作所写的博客,(java小白)为了让自己对这些新学的知识,框架更加的熟悉,熟练,以此来此记录,如有错误,请各位大佬指正!!! 因为公司采用的前 ...

  3. SpringBoot 系列教程(十三):SpringBoot集成EasyPoi实现Excel导入导出

    "无意中发现了一个巨牛的人工智能教程,忍不住分享一下给大家.教程不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说一样!觉得太牛了,所以分享给大家.点人工智能教程可以跳转到教程. easyp ...

  4. java超级简单到爆的Excel导入导出(easypoi)

    场景: 在日常工作中,excel导入导出,是十分常见的,有两种主流的技术,一种是jxl,另一种是poi,而easypoi就是对poi进行了封装,使得导入导出变得更加的简单,阿里巴巴也有封装的工具名叫E ...

  5. easypoi 多sheet导入_程序员接私活利器 玩转excel导入导出

    为什么会写Easypoi 以前的以前(岁月真TMD的快)我虽然写了不少代码但还是很少写poi,然后跳到一家公司之后就和业务人员聊上了,来这个需要个报表,这个报表样式是这样的,这个表头是这样的,就这样我 ...

  6. easyexcel多个sheet导入_Java中Easypoi实现excel多sheet表导入导出功能

    Easypoi简化了开发中对文档的导入导出实现,并不像poi那样都要写大段工具类来搞定文档的读写. 第一步引入Easypoi依赖 cn.afterturn easypoi-spring-boot-st ...

  7. easypoi 列合并_SpringBoot整合EasyPOI实现Excel、Word的导入导出功能

    一.EsayPOI的介绍 easypoi 功能如同名字easy,主打的功能就是容易.让一个没见接触过poi的人员就可以方便的写出Excel导出,Excel导出,Excel导入,Word模板导出,通过简 ...

  8. easypoi一对多导入_easypoi导入Excel最佳实践

    前言 一直以来,使用EasyPOI做了不少导入导出的需求,但是每次做完都是临时去看官方文档现学现用,正巧最近朋友遇到这么个需求,用到了EasyPOI来完成导入,我也正好整理整理EasyPOI的导入用法 ...

  9. easypoi 多sheet导入_easy-poi: Easy-POI是一款Excel导入导出解决方案组成的轻量级开源组件。...

    Easy-POI Easy-POI是一款Excel导入导出解决方案组成的轻量级开源组件. 如果喜欢或愿意使用, 请star并且Watch本项目或者移步码云捐赠我们 https://gitee.com/ ...

最新文章

  1. Call指令和Ret指令讲解
  2. 9读书1-我在义务发财(1)
  3. Xcode中的-ObjC和-all_load
  4. 愿你的指下有代码,眼里有星辰
  5. Centos6 使用yum快速搭建LAMP环境
  6. hadoop的ACL权限
  7. MyEclipse10 中的两种FreeMarker插件的安装与配置
  8. python3 输出系统信息
  9. 关于微博api返回内容不全内容
  10. 19条优秀的编码原则
  11. 艾欧尼亚服务器延迟正常吗,lol延迟和服务器位置有关系?为什么我的lol延迟这么高?...
  12. iOS 中设置下划线失效不显示
  13. 机器学习的L1、L2损失函数
  14. 和差化积公式 和 积化和差公式
  15. 地下迷宫探索 java_Java 8:探索可能性
  16. 前端网络基础-应用层DNS协议
  17. x友GRP-u8 注入-RCE漏洞复现
  18. macOS上的改键指南--使用Karabiner
  19. JVM设置对象直接进入年老代
  20. Android系统版本与代号

热门文章

  1. locate,find
  2. git 基于发布分支的开发
  3. XPE一般性组件整理
  4. Ms Press China MVP-书评活动-王万利 Microsoft Active Directory Administrator's Pocket Consultant...
  5. spring之旅第四篇-注解配置详解
  6. MySQL · B+树并发控制机制的前世今生
  7. 易飞90设计自己定义画面新增功能说明
  8. Maven中jar版本冲突问题的解决
  9. python 通过paramiko模块批量执行ssh命令
  10. ppcelerator徐旸:新一代移动互联网技术