加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

EasyPoi导入Excel

发布时间:2020-12-15 07:12:55 所属栏目:Java 来源:网络整理
导读:EasyPoi的导出Excel功能和导入功能同样简单。 我之前强调过,EasyPoi的原理本质就是Poi,正如MyBatis Plus的本质原理就是MyBatis。 POI导入功能可以参考如下地址:https://blog.csdn.net/justinqin/article/details/78769789 POI导出功能可以参考如下地址:关于

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;

 javax.validation.constraints.Max;
 javax.validation.constraints.Pattern;

 org.hibernate.validator.constraints.NotBlank;

 cn.afterturn.easypoi.excel.annotation.Excel;

public class User {
    @Excel(name = "id")
    private String id;

    @Excel(name = "姓名" String name;

    @Excel(name = "年龄" Integer age;

    @Excel(name = "生日",importFormat = "yyyy-MM-dd" Date birthday;

    public String getId() {
        return id;
    }

    void setId(String id) {
        this.id = String getName() {
         name;
    }

     setName(String name) {
        this.name =int getAge() {
         age;
    }

    void setAge( age) {
        this.age = Date getBirthday() {
         birthday;
    }

     setBirthday(Date birthday) {
        this.birthday = birthday;
    }

}

?

3.编写Handle

 com.eluzhu.lms.entity.User;

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

class UserExcelHandler extends ExcelDataHandlerDefaultImpl<User> {
    

    
    

    @Override
     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 =  ImportParams();
        // 数据处理
        IExcelDataHandler<User> handler =  UserExcelHandler();
        handler.setNeedHandlerFields(new String[] { "姓名" }); 注意这里对应的是excel的列名。也就是对象上指定的列名。
        importParams.setDataHanlder(handler);

         需要验证
        importParams.setNeedVerfiy(true);

        try {
            ExcelImportResult<User> result = ExcelImportUtil.importExcelMore(file.getInputStream(),User.,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()));
            }
             (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异常");
            
        }  (Exception e) {
            log.error(e.getMessage(),e);
            json.put("returnMsg","特殊异常");
        
        }
        
         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 =  FormData();
    var name = $("#upfile").val();
    formData.append("file",$("#upfile")[0].files[0]);
    formData.append("name"'POST'false 告诉jQuery不要去处理发送的数据
        processData :  告诉jQuery不要去设置Content-Type请求头
        contentType : );
        },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就是?

就是出现这样的问题。

?

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

?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读