EasyPoi导入Excel

简介: EasyPoi的导出Excel功能和导入功能同样简单。我之前强调过,EasyPoi的原理本质就是Poi,正如MyBatis Plus的本质原理就是MyBatis。POI导入功能可以参考如下地址:https://blog.csdn.net/justinqin/article/details/78769789POI导出功能可以参考如下地址:关于EasyPoi导出Excel首先说下,我为什么要用到导入Excel功能?因为业务需要有一个Excel表格里面装有数据,然后通过文件上传的形式,直接动态批量录入数据。

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

就是出现这样的问题。

 

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

 

目录
相关文章
|
24天前
|
SQL 缓存 easyexcel
面试官问10W 行级别数据的 Excel 导入如何10秒处理
面试官问10W 行级别数据的 Excel 导入如何10秒处理
52 0
|
1月前
|
Java Apache
EasyPOI操作Excel从零入门
我们不造轮子,只是轮子的搬运工。(其实最好是造轮子,造比别人好的轮子)开发中经常会遇到excel的处理,导入导出解析等等,java中比较流行的用poi,但是每次都要写大段工具类来搞定这事儿,此处推荐一个别人造好的轮子,EasyPOI封装了Apache的POI技术,实现了基本的Excel导入、导出从此不再为Excel操作头疼~
20 2
EasyPOI操作Excel从零入门
|
6天前
|
easyexcel 数据库
公司大佬对excel导入、导出的封装,那叫一个秒啊
封装公司统一使用的组件的主要目标是为了简化开发人员的调用流程,避免各个项目组重复集成和编写不规范的代码。文中提到对阿里EasyExcel进行了二次封装,提供了导入和导出功能,并支持模板的导入和导出。此外,还处理了读取数据与实际保存数据不一致的情况,通过提供自定义转换器来解决。
24 0
|
14天前
|
Java
Excel轻松操控:掌握EasyPoi的妙用技巧(二)
Excel轻松操控:掌握EasyPoi的妙用技巧
32 1
|
14天前
|
Java 数据库 Maven
Excel轻松操控:掌握EasyPoi的妙用技巧(一)
Excel轻松操控:掌握EasyPoi的妙用技巧
53 4
|
1月前
|
存储 数据处理 数据格式
Python中导入Excel数据:全面解析与实践
Python中导入Excel数据:全面解析与实践
42 0
|
1月前
|
存储 关系型数据库 MySQL
Python导入Excel数据到MySQL数据库
Python导入Excel数据到MySQL数据库
93 0
|
1月前
|
Java easyexcel 应用服务中间件
【二十五】springboot使用EasyExcel和线程池实现多线程导入Excel数据
【二十五】springboot使用EasyExcel和线程池实现多线程导入Excel数据
207 0
|
6月前
|
Java Maven
【Java用法】使用EasyPoi导入与导出Excel文档的解决方案
【Java用法】使用EasyPoi导入与导出Excel文档的解决方案
148 0
|
3月前
|
easyexcel 数据库
为获取导入百分比,使用easyexcel获取导入excel表总行数
为获取导入百分比,使用easyexcel获取导入excel表总行数
88 0