Java中处理表格

大家好 , 我是苏麟 , 也是很久没有更新了 , 今天带来一个很好使用的一个库 easyexcel.

JAVA后端开发中可能会遇到一个问题 , 就是处理Execel表格 , 当然不一定非要用Java 我们在这里只说在Java里怎么去处理表格 . 

Easy Excel

 我们今天要说到就是 Easy Excel , 这个是阿里的项目

官方文档连接   :   https://easyexcel.opensource.alibaba.com/

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

Java中处理表格_第1张图片

 Java中处理表格_第2张图片

引入依赖

        
            com.alibaba
            easyexcel
            3.1.0
        

下面开始读Excel 

两种方式 :

第一种最简单方式

Demo :  例如我们有一个表格

Java中处理表格_第3张图片

 第一步在Java中创建一个类 , 每一个标题对应一个字段

@Data
public class ExcelDemo {

    /**
     * 用户编号
     */
    @ExcelProperty("用户编号")
    private String userId;

    /**
     * 用户姓名
     */
    @ExcelProperty("用户姓名")
    private String username;

}

第二步准备一个读取数据的类

/**
 * 用户
 */
public class UserImportExcel {
    public static void main(String[] args) {
        //获取Excel的绝对路径
        String fileName = "T:\\projrct\\src\\main\\java\\com\\sl\\ExcelOnce\\sll.xlsx";
        //打印数据
        userList.forEach(System.out::println);
        //读取数据
        List userList = EasyExcelFactory.read(fileName).head(ExcelDemo.class).sheet().doReadSync();
        //过滤掉重复数据
        Map> collectList =
                userList.stream()
                        .filter(suer -> StringUtils.isNotEmpty(suer.getUsername()))
                        .collect(Collectors.groupingBy(ExcelDemo::getUsername));

        System.out.println("不重复数据数量是 : " + collectList.keySet().size());

    }
}

运行结果

Java中处理表格_第4张图片

 第二种方式 : 监听器

第一步在Java中创建一个类

@Data
public class ExcelDemo {

    /**
     * 用户编号
     */
    @ExcelProperty("用户编号")
    private String userId;

    /**
     * 用户姓名
     */
    @ExcelProperty("用户姓名")
    private String username;

}

第二步准备一个监听器

@Slf4j
public class ExcelDemoListener implements ReadListener {

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

    /**
     * 所有数据解析完成了 都会来调用
     *
     * @param context
     */
    @Override
    public void doAfterAllAnalysed(AnalysisContext context) {
        // 这里也要保存数据,确保最后遗留的数据也存储到数据库
        System.out.println("数据处理完成");
    }

}

第三步准备实现的类

public class ImportExcel {
    public static void main(String[] args) {
        //获取Excel的路径
        String fileName = "T:\\projrct\\src\\main\\java\\com\\sl\\ExcelOnce\\sll.xlsx";
        /**
         *    方法1.监听器
         *   优点: 清晰便于维护
         *   缺点:要写监听器 , 一次只能处理一条数据
         */

        readByListener(fileName);
    }


    /**
     * 通过监听器的方法来读取数据
     *
     * @param fileName
     */
    public static void readByListener(String fileName) {
        //读取数据
        EasyExcelFactory.read(fileName, ExcelDemo.class, new ExcelDemoListener()).sheet().doRead();
    }

}

结果是一样的

读取表格还是很简单的 , 学会读取表格之后写入表格就更简单了

写入表格

准备一个和表格字段一样的类

@Data
public class ExcelDemo {

    /**
     * 用户编号
     */
    @ExcelProperty("用户编号")
    private String userId;

    /**
     * 用户姓名
     */
    @ExcelProperty("用户姓名")
    private String username;

}

准备一个写入表格的类

public class UserImportExcel {
    public static void main(String[] args) {
            // 已读取和处理后的数据列表
            List dataList = userList;
            //Excel表的名称
            String fileName = "sll.xlsx";
            EasyExcel.write(fileName, ExcelDemo.class)
                    .sheet("数据表")
                    .doWrite(dataList);
        }

    }
}

这里会把原来的数据覆盖掉......

当然也有许多好用的处理Excel表格的库 例如 :  apache poi , easypoi ......

如果想了解更多 , 请看官网文档 , 会给您带来一种新的感受......

拜拜 , 期待下一次的见面!

你可能感兴趣的:(java项目开发中的依赖,java)