使用EasyPoi实现Excel文件导入

一、功能介绍:使用EasyPoi将Excel文件中的数据导入数据库并显示。
二、实现效果

批量导入实现效果图

三、实现过程
        1、前端页面

1.1 Excel文件数据

1.2  前端代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
    <title>EasyPOIProject</title>
</head>
<style type="text/css">
    body{
        margin: 0px;
    }
    #app{
        width: 100%;
    }
</style>
<body>
<div id="app">
    <div style="width: 100px; height: 50px;margin-top: 50px;margin-left: 100px;">
        <el-button style="width: 100px;height: 50px;background-color: antiquewhite">批量导入</el-button>
        <input style="width: 100px;height: 50px;background-color: #2e6da4;opacity:0;
        position: absolute;top: 50px;left: 100px;" @change="upload" type="file" multiple ref="file" >
    </div>
    <div style="margin-top: 50px;" align="center">
        <el-table
                :data="excelUploadAll"
                style="width: 80%;" >
            <el-table-column
                    prop="id"
                    label="编号"
                    width="90"
                    align="center">
            </el-table-column>
            <el-table-column
                    prop="name"
                    label="姓名"
                    width="120"
                    align="center">
            </el-table-column>
            <el-table-column
                    prop="nickName"
                    label="昵称"
                    width="120"
                    align="center">
            </el-table-column>
            <el-table-column
                    prop="birthday"
                    label="出生日期"
                    width="120"
                    align="center">
            </el-table-column>
            <el-table-column
                    prop="idCard"
                    label="身份证号"
                    width="200"
                    align="center">
            </el-table-column>
            <el-table-column
                    prop="address"
                    label="家庭住址"
                    width="180"
                    align="center">
            </el-table-column>
            <el-table-column
                    prop="grade"
                    label="入学年份"
                    width="90"
                    align="center">
            </el-table-column>
            <el-table-column
                    prop="status"
                    label="状态"
                    width="80"
                    align="center">
            </el-table-column>
            <el-table-column
                    prop="hobby"
                    label="爱好"
                    align="center">
            </el-table-column>
        </el-table>
    </div>
</div>
</body>
<!-- import Vue before Element -->
<script src="https://unpkg.com/vue@2/dist/vue.js"></script>
<!-- import JavaScript -->
<script src="https://unpkg.com/element-ui/lib/index.js"></script>
<script src="../axios.min.js"></script>
<script>
    let v = new Vue({
        el: '#app',
        data: function() {
            return {
                excelUploadAll:[],
                flag:"",
            }
        },
        created(){},
        methods:{
            upload(){
                let files = this.$refs.file.files;
                for (let i = 0; i < files.length; i++) {
                    let formData = new FormData();
                    formData.append('file', files[i]);
                    axios.post("/excelUpload", formData, {
                        'Content-Type': 'multipart/form-data'
                    }).then(function (response) {
                        v.flag=response.data;
                        if (v.flag == "1"){
                            v.$message.success("批量导入成功")
                            //显示批量导入数据
                            axios.get("/getExcelUploadList").then(function (response) {
                                v.excelUploadAll = response.data
                            })
                        }
                    })
                }
            },
        }
    })
</script>
</html>

前端实现效果图如下所示:

2、后端实现

2.1 导入EasyPoi有关依赖

EasyPoi官方文档中复制相关依赖。

<!--        引入EasyPOI有关依赖-->
        <dependency>
            <groupId>cn.afterturn</groupId>
            <artifactId>easypoi-base</artifactId>
            <version>3.2.0</version>
        </dependency>
        <dependency>
            <groupId>cn.afterturn</groupId>
            <artifactId>easypoi-web</artifactId>
            <version>3.2.0</version>
        </dependency>
        <dependency>
            <groupId>cn.afterturn</groupId>
            <artifactId>easypoi-annotation</artifactId>
            <version>3.2.0</version>
        </dependency>

2.2 实体类

package com.example.copy.entity;

import cn.afterturn.easypoi.excel.annotation.Excel;
import cn.afterturn.easypoi.excel.annotation.ExcelTarget;
import lombok.Data;

import java.io.Serializable;

@Data
@ExcelTarget("USER")
public class User implements Serializable {
    @Excel(name = "编号",orderNum = "0")
    private Integer id;

    @Excel(name = "姓名",orderNum = "1")
    private String name;

    @Excel(name = "昵称",orderNum = "2")
    private String nickName;

    @Excel(name = "出生日期",orderNum = "3")
    private String birthday;

    @Excel(name = "状态",orderNum = "4",replace = { "激活_1", "锁定_0" })
    private Integer status;

    @Excel(name = "爱好",orderNum = "5")
    private String hobby;

    @Excel(name = "身份证号",orderNum = "6")
    private String idCard;

    @Excel(name = "家庭住址",orderNum = "7")
    private String address;

    @Excel(name = "入学年份",orderNum = "8")
    private String grade;
}

2.3 Controller层

package com.example.copy.controller;

import cn.afterturn.easypoi.excel.ExcelImportUtil;
import cn.afterturn.easypoi.excel.entity.ImportParams;
import com.example.copy.entity.User;
import com.example.copy.mapper.UserMapper;
import lombok.Cleanup;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.io.InputStream;
import java.util.List;

@RestController
public class UserController {
    @Autowired
    UserMapper userMapper;

//    从数据库中读取数据
    @RequestMapping("/getExcelUploadList")
    public List<User> getExcelUploadList(){
        List<User> userList = userMapper.selectAllExcelUser();
        return userList;
    }

//    批量导入数据库
    @RequestMapping("/excelUpload")
    public String excelUpload(MultipartFile file) throws Exception{
        //excel导入
        ImportParams params = new ImportParams();
         String fileName = file.getOriginalFilename();
//        导入Excel表中表名所占行
        params.setTitleRows(1);
//        导入Excel表中属性信息所占行
        params.setHeadRows(1);
        @Cleanup
        InputStream inputStream = file.getInputStream();
        List<User> userList = ExcelImportUtil.importExcel(inputStream,User.class,params);
        inputStream.close();
        System.out.println(fileName);
        for (User user : userList){
            System.out.println(user);
            userMapper.excelInsertUsers(user);
        }
        return "1";
    }

}

2.4 mapper层定义数据库查询与插入方法

package com.example.copy.mapper;

import com.example.copy.entity.User;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;

@Mapper
public interface UserMapper {

//    读取表中全部信息
    List<User> selectAllExcelUser();

    void excelInsertUsers(User user);
}

2.5 SQL语句

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.copy.mapper.UserMapper">

    <resultMap id="UserMap" type="com.example.copy.entity.User">
        <result property="id" column="id"></result>
        <result property="name" column="name"></result>
        <result property="nickName" column="nickName"></result>
        <result property="birthday" column="birthday"></result>
        <result property="address" column="address"></result>
        <result property="idCard" column="idCard"></result>
        <result property="grade" column="grade"></result>
        <result property="status" column="status"></result>
        <result property="hobby" column="hobby"></result>
    </resultMap>

<!--    查询数据表中所有数据-->
    <select id="selectAllExcelUser" resultMap="UserMap">
        SELECT * FROM excel.user;
    </select>

<!--    插入数据-->
    <insert id="excelInsertUsers" parameterType="com.example.copy.entity.User">
        INSERT INTO excel.user (id, name, nickName, birthday, status, hobby, idCard, address, grade)
        VALUES (#{id}, #{name}, #{nickName}, #{birthday}, #{status}, #{hobby}, #{idCard}, #{address}, #{grade});
    </insert>

</mapper>

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
使用EasyPoi实现Excel导入,你需要按照以下步骤进行操作: 1. 首先,你需要在你的项目中添加EasyPoi的依赖。你可以在你的pom.xml文件中添加以下依赖项: ``` <dependency> <groupId>cn.afterturn</groupId> <artifactId>easypoi-base</artifactId> <version>3.2.0</version> </dependency> <dependency> <groupId>cn.afterturn</groupId> <artifactId>easypoi-web</artifactId> <version>3.2.0</version> </dependency> <dependency> <groupId>cn.afterturn</groupId> <artifactId>easypoi-annotation</artifactId> <version>3.2.0</version> </dependency> ``` 引用\[3\] 2. 创建一个实体类,用于映射Excel中的数据。你可以使用`@Excel`注解来指定Excel中的列名和字段映射关系。例如,你可以创建一个名为`ClassScheduleEntity`的实体类,如下所示: ``` @Data @ExcelTarget("ClassScheduleEntity") public class ClassScheduleEntity implements Serializable { @Excel(name = "序号", isImportField = "true_st") private int id; @Excel(name = "星期一", isImportField = "true_st") private String mondayCourse; @Excel(name = "星期二", isImportField = "true_st") private String tuesdayCourse; @Excel(name = "星期三", isImportField = "true_st") private String wednesdayCourse; @Excel(name = "星期四", isImportField = "true_st") private String thursdayCourse; @Excel(name = "星期五", isImportField = "true_st") private String fridayCourse; } ``` 引用\[2\] 3. 在你的代码中,使用`EasyPoiUtils.importExcel`方法来导入Excel数据。你需要提供Excel文件的路径和要导入的实体类类型。例如,你可以在`main`方法中使用以下代码来导入Excel数据: ``` public static void main(String\[\] args) throws Exception { String path = "文件地址"; List<ClassScheduleEntity> list = EasyPoiUtils.importExcel(path, 1, 1, ClassScheduleEntity.class); } ``` 引用\[1\] 这样,你就可以使用EasyPoi实现Excel导入了。请确保你已经正确配置了EasyPoi的依赖,并按照上述步骤创建实体类和调用导入方法。 #### 引用[.reference_title] - *1* *2* *3* [easypoi导入Excel文件](https://blog.csdn.net/Skyline_ding/article/details/101674520)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值