EasyPoi的导出Excel功能和导入功能同样简单。
我之前强调过,EasyPoi的原理本质就是Poi,正如MyBatis Plus的本质原理就是MyBatis。

POI导入功能可以参考如下地址:https://blog.csdn.net/justinqin/article/details/78769789
POI导出功能可以参考如下地址:关于EasyPoi导出Excel

首先说下,我为什么要用到导入Excel功能?

因为业务需要有一个Excel表格里面装有数据,然后通过文件上传的形式,直接动态批量录入数据。

示例流程:

1.导入Maven依赖

        <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>

2.建立模型(创建实体)

import java.util.Date;

import javax.validation.constraints.Max;
import javax.validation.constraints.Pattern; import org.hibernate.validator.constraints.NotBlank; import cn.afterturn.easypoi.excel.annotation.Excel; public class User {
@Excel(name = "id")
private String id; @Excel(name = "姓名")
private String name; @Excel(name = "年龄")
private Integer age; @Excel(name = "生日", importFormat = "yyyy-MM-dd")
private Date birthday; public String getId() {
return id;
} public void setId(String id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} public Date getBirthday() {
return birthday;
} public void setBirthday(Date birthday) {
this.birthday = birthday;
} }

3.编写Handle

import com.eluzhu.lms.entity.User;

import cn.afterturn.easypoi.handler.impl.ExcelDataHandlerDefaultImpl;

public class UserExcelHandler extends ExcelDataHandlerDefaultImpl<User> {

    @Override
public Object importHandler(User obj, String name, Object value) {
System.out.println("进来了");
return super.importHandler(obj, name, value);
}
}

4.编写Controller

@PostMapping(value="/excelImport",produces="application/json;charset=utf-8")
public JSONObject excelImport(@RequestParam("file") MultipartFile file) { JSONObject json = new JSONObject();
ImportParams importParams = new ImportParams();
// 数据处理
IExcelDataHandler<User> handler = new UserExcelHandler();
handler.setNeedHandlerFields(new String[] { "姓名" });// 注意这里对应的是excel的列名。也就是对象上指定的列名。
importParams.setDataHanlder(handler); // 需要验证
importParams.setNeedVerfiy(true); try {
ExcelImportResult<User> result = ExcelImportUtil.importExcelMore(file.getInputStream(), User.class,
importParams); List<User> successList = result.getList();
List<User> failList = result.getFailList(); log.info("是否存在验证未通过的数据:" + result.isVerfiyFail());
log.info("验证通过的数量:" + successList.size());
log.info("验证未通过的数量:" + failList.size()); for (User user : successList) {
log.info("成功列表信息:ID=" + user.getId() + user.getName() + "-"
+ new SimpleDateFormat("yyyy-MM-dd").format(user.getBirthday()));
}
for (User user : failList) {
log.info("失败列表信息:" + user.getName());
}
json.put("returnMsg", "导入数据成功");
json.put("returnCode", "000000");
} catch (IOException e) {
log.error(e.getMessage(), e); json.put("returnMsg", "I/O异常");
json.put("returnCode", "111111"); } catch (Exception e) {
log.error(e.getMessage(), e);
json.put("returnMsg", "特殊异常");
json.put("returnCode", "222222"); } return json;
}

5.编写html页面和异步函数

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript" src="../js/jquery-1.11.3.min.js"></script>
<script type="text/javascript">
function importExp() {
var formData = new FormData();
var name = $("#upfile").val();
formData.append("file",$("#upfile")[0].files[0]);
formData.append("name",name);
$.ajax({
url : '/lms/excelImportLock',
type : 'POST',
async : false,
data : formData,
// 告诉jQuery不要去处理发送的数据
processData : false,
// 告诉jQuery不要去设置Content-Type请求头
contentType : false,
beforeSend:function(){
console.log("正在进行,请稍候");
},
success : function(data) {
alert(data.returnMsg);
}
});
} </script>
</head>
<body>
<ul>
<li>
<span>上&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;传:</span>
<span class="input">
<input type="file" id="upfile" name="upfile" placeholder=""/>
</span>
<button onclick="importExp();">导入</button>
<span>格式:.xls</span>
</li>
</ul> </body>
</html>

六、存在材料

创建一个Excel表格,如图:

七、测试

进入到html页面,上传对应的Excel模板,当弹出导入数据成功时,控制台无报错信息,表示已经测试成功。

另外从中我思考了,今天是我初次测试导入Excel批量录入数据功能,发现如果要想在页面上多有应用并确保无异常,特别是有的时候无法应用单元测试来达到目的时,可通过简单得html+js函数进行测试,这样也有利于开发效率的提高和避免一定的风险,要知道,页面越复杂,越不利于问题排查和解决。因为有的时候就是引用js类库的冲突,从而影响部分js函数,之前我的这篇文章

说说Vue.js的v-for就是

就是出现这样的问题。

希望该篇文章能够给大家带来帮助。

EasyPoi导入Excel的更多相关文章

  1. SpringBoot2.x使用EasyPOI导入Excel浅谈

    SpringBoot2.x使用EasyPOI导入Excel浅谈 平时经常遇到客户要帮忙导入一些数据到数据库中,有些数据比较多有时候手动录入就会很耗时间,所以就自己写一个Excel导入的demo记录一下 ...

  2. EasyPOI导入导出Excel

    EasyPOI工具可以方便的写出Excel导出,Excel模板导出,Excel导入,Word模板导出,通过简单的注解和模板 导入maven依赖 <dependency> <group ...

  3. Easypoi实现excel多sheet表导入导出功能

    Easypoi简化了开发中对文档的导入导出实现,并不像poi那样都要写大段工具类来搞定文档的读写. 第一步引入Easypoi依赖 <!-- 导出文件工具 EasyPoi实现Excel读写管理测试 ...

  4. 关于EasyPoi导出Excel

    如果你觉得Easypoi不好用,喜欢用传统的poi,可以参考我的这篇博客:Springmvc导出Excel(maven) 当然了,万变不离其宗.Easypoi的底层原理还是poi.正如MyBatis ...

  5. 使用easypoi导出excel

    EasyPOI是在jeecg的poi模块基础上,继续开发独立出来的,可以说是2.0版本,EasyPoi封装的目的和jeecg一致,争取让大家write less do more ,在这个思路上easy ...

  6. 使用postman上传excel文件测试导入excel

    今日思语:城市的生活很快,有时学会让自己慢下来,慢慢来 对于做一些文件上传操作时,一般我们是直接在前端页面加入类型为file的input标签,也可以使用postman来进行文件的上传测试,如下: po ...

  7. 一步步实现ABAP后台导入EXCEL到数据库【3】

    在一步步实现ABAP后台导入EXCEL到数据库[2]里,我们已经实现计划后台作业将数据导入数据库的功能.但是,这只是针对一个简单的自定义结构的导入程序.在实践应用中,面对不同的表.不同的导入文件,我们 ...

  8. 一步步实现ABAP后台导入EXCEL到数据库【1】

    在SAP的应用当中,导入.导出EXCEL文件的情况是一个常见的需求,有时候用户需要将大量数据定期导入到SAP的数据库中.这种情况下,使用导入程序在前台导入可能要花费不少的时间,如果能安排导入程序为后台 ...

  9. [Asp.net]常见数据导入Excel,Excel数据导入数据库解决方案,总有一款适合你!

    引言 项目中常用到将数据导入Excel,将Excel中的数据导入数据库的功能,曾经也查找过相关的内容,将曾经用过的方案总结一下. 方案一 NPOI NPOI 是 POI 项目的 .NET 版本.POI ...

随机推荐

  1. iOS之nib、xib及storyboard的区别及storyboard的加载过程

    先讲述下nib, nib是3.0版本以前的产物,在终端下我们可以看到,NIB其实是一个文件夹,里面有可执行的二进制文件: 区分xib和storyboard的区别? 不同点: 1> 无论nib也好 ...

  2. SpringCloud实战之初级入门(三)— spring cloud config搭建git配置中心

    目录 1.环境介绍 2.配置中心 2.1 创建工程 2.2 修改配置文件 2.3 在github中加入配置文件 2.3 修改启动文件 3. 访问配置中心 1.环境介绍 上一篇文章中,我们介绍了如何利用 ...

  3. JSON 转 VO

    需求 将获取的json数据直接转为vo 解决 利用net.sf.json.JSONObject的toBean() 确保json中的key值和vo中的字段名称一致 JSONObject jsonObje ...

  4. pom文件解析

    Maven的依赖是使用Maven坐标来定位的,而Maven坐标主要由GAV(groupId, artifactId, version)构成.因此,使用任何一个依赖之间,你都需要知道它的Maven坐标. ...

  5. Vue引入第三方JavaScript库和如何创建自己的Vue插件

    一 第三方JavaScript库 前言 .vue文件 中不解析 script标签引入js文件,只能用 import 引入 有两种用法: 1.import a from '../a' 2.import ...

  6. 无法远程访问Mysql的解决方案

    现在在很多的互联网公司对于mysql数据库的使用已经是不可阻挡的趋势了,所以经常我们在项目开始的时候就会做的事情就是找一台Linux服务器,到上面去安装个mysql,然后在开始我们的数据表的导入工作, ...

  7. 把连接中传的参数截取出来变成一个json对象

    获取url function test() { var url=window.location.search; if(url.indexOf("?")!=-1) { var str ...

  8. FPGA学习系列 各种门器件程序积累

    1. 两输入与(and)门 entity and2gate is Port ( x : in STD_LOGIC; y : in STD_LOGIC; z : out STD_LOGIC);end a ...

  9. $.each遍历JSON字符串和 Uncaught TypeError: Cannot use 'in' operator to search for '156错误

    现在页面和后端交互都流行使用json了  自己记录一下解析字符串的方法,要不老是忘记!!!! success: function (data) { //data是后台传过来的字符串 $.each(JS ...

  10. Linux 虚拟机中配置 GNOME + VNC

    需求描述 在特定的需求下,需要用到 Linux 的图形化界面,但是 Azure 平台提供的虚拟机默认没有开放远程图形化登陆的功能.以下解决方案,提供了市面上非常流行的 GNOME + VNC 的组合来 ...