EasyExcel基本使用-简单导入

目录

一、Java 如何操作Excel

EasyExcel官方地址:

二、使用流程

简单读取

1.1 Excel表格

1.2 引入依赖

1.3 创建实体类

1.4 读取Excel文件

1.5 UserReadListener()配置

Thymeleaf简单导入接口

2.1 前端

2.2 后端

一、Java 如何操作Excel

  • jxl (很久没更新,只支持到2003版Excel)

  • apache poi

  • EasyExcel

EasyExcel官方地址:

EasyExcel官方文档 - 基于Java的Excel处理工具 | Easy Excel (alibaba.com)

二、使用流程

简单读取

1.1 Excel表格

EasyExcel基本使用-简单导入_第1张图片

 

1.2 引入依赖



    com.alibaba
    easyexcel
    3.1.1

1.3 创建实体类

创建与Excel表格字段对应的实

@Data
public class User {

    @ExcelProperty("用户名")  //与Excel列的标题匹配、匹配
    private String name;

    @ExcelProperty("年龄")
    private String age;

    @ExcelProperty("手机号")
    private String phone;
 
}

1.4 读取Excel文件

import com.alibaba.excel.EasyExcel;

public class TestRead {

    public static void main(String[] args) throws Exception {
        EasyExcel.read("要读的文件.xlsx", User.class, new UserReadListener()).sheet().doRead();
    
    }
}

read() 第一个是要读的Excel表格,第二个是读取后要封装成的对象,UserReadListener是监听器,每读一行,监听器就触发

.sheet()是选择读取哪个sheet

然后就可以doRead()读取了。

 

1.5 UserReadListener()配置

public class UserReadListener implements ReadListener {

    /**
     * 每条数据都会调用一次这个方法
     * @param o 代表当前被读取的一条记录
     * @param analysisContext 可以获取当前读取的表格的相关信息
     */
    @Override
    public void invoke(Object o, AnalysisContext analysisContext) {
        // 读取到的数据就放在Object o的o里,里面就是User类型的数据,可以强制转换成User类型
        User user = (User)o;
        System.out.println(user.getName());
        System.out.println(user);
    }

    /**
     * 所有数据解析完成会来调用
     */
    @Override
    public void doAfterAllAnalysed(AnalysisContext analysisContext) {
        System.out.println("所有记录已读取完成!");
    }
}

完成!自己试着运行!

Thymeleaf简单导入接口

2.1 前端


请选择文件:

2.2 后端

 //使用MultipartFile接收上传的文件,参数名要和input的name一致
    @PostMapping("/importUser")
    public String doImport(MultipartFile userFile){
//        获取文件名
//        System.out.println(userFile.getOriginalFilename()); 
//        获取文件大小
//        System.out.println(userFile.getSize());
//        userFile.getInputStream() 获取文件的输入流,就是文件的内容

        //使用匿名内部类的写法,实现ReadListener
        //使用BeanUtils复制DTO类和Entity类之间的属性
        try {
            EasyExcel.read(userFile.getInputStream(),
                    UserDTO.class, new ReadListener(){

                        @Override
                        public void invoke(Object o, AnalysisContext analysisContext) {
                            User user = (User)o;

                            User u = new User();
//                            u.setName(user.getName());
//                            u.setAge(user.getAge());
//                            u.setPhone(user.getPhone());
                            BeanUtils.copyProperties(user, u);

                            try {
                                userService.saveUser(u);
                            } catch (Exception e) {
                                e.printStackTrace();
                            }
                            System.out.println(user);
                        }

                        @Override
                        public void doAfterAllAnalysed(AnalysisContext analysisContext) {

                        }
                    }).sheet().doRead();

            //方式二:匿名内部类的写法,适合这个接口只实现一次的情况
        } catch (IOException e) {
            e.printStackTrace();
        }
        return "userImport";
    }

new ReadListener()采用匿名内部类的写法,原因是new出来的方法,不能使用@Autowired注入,不能注入就使用不了自动注入的方法。

拓展:该方法还使用了一个BeanUtils的类,这个主要起复制粘贴的作用。copyProperties(user, u)将第一个参数复制给第二个。BeanUtils复制粘贴内容_131.313的博客-CSDN博客

你可能感兴趣的:(java)