首页 > 编程语言 >【项目实战】JAVA 项目使用 EasyExcel 读取和导入数据到项目中

【项目实战】JAVA 项目使用 EasyExcel 读取和导入数据到项目中

时间:2024-09-22 21:54:40浏览次数:3  
标签:JAVA 读取 项目 EasyExcel fileName public println class String

1、easy Excel引入依赖

进入官网Get Started就可以了。(官方文档简单好用,跟着走就可以了。)

https://alibaba-easyexcel.github.io/index.html

        <!-- easy Excel -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel</artifactId>
            <version>3.1.0</version>
        </dependency>

2、新建文件夹和用户信息文件

testExcel.xlsx

@Data
public class TableUserInfo {
    /**
     * id
     */
    @ExcelProperty("成员编号")
    private String planetCode;

    /**
     * 用户昵称
     */
    @ExcelProperty("成员昵称")
    private String username;

}

3、新建监听器

// 有个很重要的点 TableListener 不能被spring管理,要每次读取excel都要new,然后里面用到spring可以构造方法传进去
@Slf4j
public class TableListener implements ReadListener<TableUserInfo> {

    /**
     * 这个每一条数据解析都会来调用
     *
     * @param data    one row value. Is is same as {@link AnalysisContext#readRowHolder()}
     * @param context
     */
    @Override
    public void invoke(TableUserInfo data, AnalysisContext context) {
        System.out.println(data);
    }

    /**
     * 所有数据解析完成了 都会来调用
     *
     * @param context
     */
    @Override
    public void doAfterAllAnalysed(AnalysisContext context) {
        System.out.println("已解析完成");
    }

}

4、新建读取数据文件

public class ImportExcel {
    /**
     * 读取数据
     */
    public static void main(String[] args) {
        // 写法1:JDK8+ ,不用额外写一个DemoDataListener
        // since: 3.0.0-beta1
        //Excel数据文件放在自己电脑上,能够找到的路径
        String fileName = "C:\\Users\\25073\\Desktop\\testExcel.xlsx";
//          readByListener(fileName);
        synchronousRead(fileName);

    }
    /**
     * 监听器读取
     * @param fileName
     */
    public static void readByListener(String fileName) {
        // 这里 需要指定读用哪个class去读,然后读取第一个sheet 文件流会自动关闭
        // 这里每次会读取100条数据 然后返回过来 直接调用使用数据就行
        EasyExcel.read(fileName, TableUserInfo.class, new TableListener()).sheet().doRead();
    }

    /**
     * 同步读
     * 同步的返回,不推荐使用,如果数据量大会把数据放到内存里面
     */
    public static void synchronousRead(String fileName) {
        // 这里 需要指定读用哪个class去读,然后读取第一个sheet 同步读取会自动finish
        List<TableUserInfo> list = EasyExcel.read(fileName).head(TableUserInfo.class).sheet().doReadSync();
        for (TableUserInfo tableUserInfo : list) {
            System.out.println(tableUserInfo);
        }

    }
}

5、读取数据运行效果

两种读取模式:

  1. 监听器:先创建监听器、在读取文件时绑定监听器。

单独抽离处理逻辑,代码清晰易于维护;一条一条处理,适用于数据量大的场景。

  1. 同步读:无需创建监听器,一次性获取完整数据。

方便简单,但是数据量大时会有等待时常,也可能内存溢出。

6、导入用户

/**
 * 导入用户到数据库
 */
public class ImportUser {

    public static void main(String[] args) {
        //Excel数据文件放在自己电脑上,能够找到的路径
        String fileName = "C:\\Users\\25073\\Desktop\\testExcel.xlsx";
        // 这里 需要指定读用哪个class去读,然后读取第一个sheet 同步读取会自动finish
        List<UserInfo> userInfoList =
                EasyExcel.read(fileName).head(UserInfo.class).sheet().doReadSync();
        System.out.println("总数 = " + userInfoList.size());
        Map<String, List<UserInfo>> listMap =
                        userInfoList.stream()
                        .filter(userInfo -> StringUtils.isNotEmpty(userInfo.getUsername()))
                        .collect(Collectors.groupingBy(TableUserInfo::getUsername));
        for (Map.Entry<String, List<TableUserInfo>> stringListEntry : listMap.entrySet()) {
            if (stringListEntry.getValue().size() > 1) {
                System.out.println("username = " + stringListEntry.getKey());
                System.out.println("1");
            }
        }
        System.out.println("不重复昵称数 = " + listMap.keySet().size());
    }
}

7、导入数据运行结果

标签:JAVA,读取,项目,EasyExcel,fileName,public,println,class,String
From: https://blog.csdn.net/2303_76696898/article/details/142444145

相关文章

  • javase笔记4----常用类型
    常用类型包装类简介java语言是面向对象的语言,但是其中的八大基本数据类型不符合面向对象的特征。因此java为了弥补这样的缺点,为这八种基本数据类型专门设计了八种符合面向对象特征的的类型,这八种具有面向对象特征的类型,统称为包装类。包装类,就是在类的内部,维护了一个基本......
  • 4--SpringBoot项目中分类管理
     目录新增分类分类分页查询启用禁用分类根据类型查询修改分类本文介绍SpringBoot项目中的分类管理,操作类似员工管理模块,具体详解可见以下博客,此处给出各部分代码 2--SpringBoot项目中员工管理详解(一)-CSDN博客 3--SpringBoot项目中员工管理详解(二)-CSDN博客新增......
  • 力扣72-编辑距离(Java详细题解)
    题目链接:力扣72-编辑距离前情提要:因为本人最近都来刷dp类的题目所以该题就默认用dp方法来做。dp五部曲。1.确定dp数组和i下标的含义。2.确定递推公式。3.dp初始化。4.确定dp的遍历顺序。5.如果没有ac打印dp数组利于debug。每一个dp题目如果都用这五步分析清楚,那么......
  • 结对项目
    目录结对项目1.PSP2.1表格2.性能分析3.设计实现过程1.结构1.number2.函数1.solve()2.create()3.getstring()4.pplus(strings)5.check(strings)6.read(strings)7.work(vectorpro)8.write1(vectorans)9.compare(vectorans,vectorans1)10.write2(vectorright,vectorwron......
  • java实现角色及菜单权限
    在Java中实现角色及菜单权限管理是一种常见的需求,特别是在企业级应用中。这种权限管理通常涉及多个层次的设计,包括角色、用户、权限和菜单等。下面是一个完整的示例,展示如何在Java中实现角色及菜单权限管理。设计思路实体类定义:定义用户、角色、权限和菜单的实体类。数据库表设计......
  • springboot+java大学周边房屋出租管理系统
    目录项目介绍技术栈具体实现截图开发核心技术:开发工具和技术详细视频演示核心代码部分展示系统设计操作可行性可行性论证系统测试个人心得详细视频演示源码获取方式项目介绍本javaweb+maven项目采用的数据库是Mysql,使用Springboot框架开发,十分方便,也具有跨平台的优......
  • EmployeeTest/EmployeeTest.java
    Employee.javaimportjava.time.LocalDate;publicclassEmployee{//3个字段,用来存放将要操作的数据privateStringname;privatedoublesalary;privateLocalDatehireDay;//通过Generate...生成后修改publicEmployee(Stringname,doub......
  • Java-数据结构-排序-(二) (๑¯∀¯๑)
    文本目录:❄️一、交换排序:    ➷ 1、冒泡排序:    ▶代码:     ➷ 2、快速排序:          ☞基本思想:          ☞方法一:Hoare法    ▶代码:           ☞方法二:挖坑法  ......
  • springboot-ssm-java企业客户关系满意度评价管理系统 o1iv4
    目录项目介绍技术栈具体实现截图开发核心技术:开发工具和技术详细视频演示核心代码部分展示系统设计操作可行性可行性论证系统测试个人心得详细视频演示源码获取方式项目介绍本javaweb+maven项目采用的数据库是Mysql,使用Springboot框架开发,十分方便,也具有跨平台的优......
  • springboot大学生校园租房网站ssm毕业设计项目
    目录项目介绍技术栈具体实现截图开发核心技术:开发工具和技术详细视频演示核心代码部分展示系统设计操作可行性可行性论证系统测试个人心得详细视频演示源码获取方式项目介绍本javaweb+maven项目采用的数据库是Mysql,使用Springboot框架开发,十分方便,也具有跨平台的优......