easypoi 导入 数字失精_EasyPoi导入Excel

本文介绍了如何使用EasyPoi库导入Excel数据,包括添加依赖、创建模型、定义处理器和编写控制器。通过示例展示了从Excel文件批量导入User对象的过程,并提供了HTML页面和异步函数的简单实现。测试中,作者强调了通过简单的前端测试来提升开发效率和减少异常风险。
摘要由CSDN通过智能技术生成

EasyPoi的导出Excel功能和导入功能同样简单。

我之前强调过,EasyPoi的原理本质就是Poi,正如MyBatis Plus的本质原理就是MyBatis。

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

POI导出功能可以参考如下地址:关于EasyPoi导出Excel

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

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

示例流程:

1.导入Maven依赖

cn.afterturn

easypoi-base

3.0.3

cn.afterturn

easypoi-web

3.0.3

cn.afterturn

easypoi-annotation

3.0.3

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

importjava.util.Date;importjavax.validation.constraints.Max;importjavax.validation.constraints.Pattern;importorg.hibernate.validator.constraints.NotBlank;importcn.afterturn.easypoi.excel.annotation.Excel;public classUser {

@Excel(name= "id")privateString id;

@Excel(name= "姓名")privateString name;

@Excel(name= "年龄")privateInteger age;

@Excel(name= "生日", importFormat = "yyyy-MM-dd")privateDate birthday;publicString getId() {returnid;

}public voidsetId(String id) {this.id =id;

}publicString getName() {returnname;

}public voidsetName(String name) {this.name =name;

}public intgetAge() {returnage;

}public void setAge(intage) {this.age =age;

}publicDate getBirthday() {returnbirthday;

}public voidsetBirthday(Date birthday) {this.birthday =birthday;

}

}

3.编写Handle

importcom.eluzhu.lms.entity.User;importcn.afterturn.easypoi.handler.impl.ExcelDataHandlerDefaultImpl;public class UserExcelHandler extends ExcelDataHandlerDefaultImpl{

@OverridepublicObject 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= newJSONObject();

ImportParams importParams= newImportParams();//数据处理

IExcelDataHandler handler = newUserExcelHandler();

handler.setNeedHandlerFields(new String[] { "姓名" });//注意这里对应的是excel的列名。也就是对象上指定的列名。

importParams.setDataHanlder(handler);//需要验证

importParams.setNeedVerfiy(true);try{

ExcelImportResult result = ExcelImportUtil.importExcelMore(file.getInputStream(), User.class,

importParams);

List successList =result.getList();

List 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");

}returnjson;

}

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

Insert title here

var formData= newFormData();

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

}

});

}

  • 上       传:

    导入

    格式:.xls

六、存在材料

创建一个Excel表格,如图:

七、测试

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

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

就是出现这样的问题。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值