• Java操作Excel文档进行读取和写入


    目录

    读出Excel文档

    写入Excel文档


    读出Excel文档

    使用EasyExcel读取Excel文件: 需要在maven项目中导入EasyExcel依赖

    1. <dependency>
    2. <groupId>com.alibabagroupId>
    3. <artifactId>easyexcelartifactId>
    4. <version>2.2.6version>
    5. dependency>

    接下来我们创建一个excle文件,名称为abc.xlsx.

    填充如下内容:

    根据Excel创建实体对象

    1. @Data
    2. public class abc {
    3. public String str;
    4. public String date;
    5. public int num;
    6. }

    然后我们需要创建一个监视器对象,用来处理读取到数据.

    1. package com.example.station.util;
    2. import cn.hutool.core.collection.ListUtil;
    3. import com.alibaba.excel.context.AnalysisContext;
    4. import com.alibaba.excel.event.AnalysisEventListener;
    5. import com.example.station.model.Excel.abc;
    6. import lombok.extern.slf4j.Slf4j;
    7. import org.apache.commons.collections4.ListUtils;
    8. import javax.servlet.ReadListener;
    9. import java.io.IOException;
    10. import java.util.ArrayList;
    11. import java.util.LinkedList;
    12. import java.util.List;
    13. // 自定义监听器
    14. // 继承 AnalysisEventListener 类, 传入需要监听的对象类型abc,重写其中的方法
    15. // 这里只需要重写 invoke() 和 doAfterAllAnalysed() 方法即可
    16. @Slf4j
    17. public class abclistener extends AnalysisEventListener {
    18. private static final int BATCH_COUNT = 10;
    19. private List cacheDataAbc = new ArrayList<>(BATCH_COUNT);
    20. // 这个方法在每一条数据解析完之后会调用
    21. // 这里可以对数据进行处理
    22. //
    23. @Override
    24. public void invoke(abc abc, AnalysisContext analysisContext) {
    25. log.info("解析到一条数据:{}", abc);
    26. cacheDataAbc.add(abc);
    27. if (cacheDataAbc.size() >= BATCH_COUNT) {
    28. // 处理缓存的数据,当达到了限定的条数,可以批量插入数据库
    29. log.info("开始处理缓存数据");
    30. cacheDataAbc.clear();
    31. // 这里可以调用service层进行数据插入
    32. }
    33. }
    34. // 这个方法在所有数据解析完成之后会调用
    35. // 这里可以进行一些善后工作,比如关闭流等
    36. //
    37. @Override
    38. public void doAfterAllAnalysed(AnalysisContext analysisContext) {
    39. log.info("所有数据解析完成");
    40. }
    41. }

     接下来我们就可以进行读取代码编写了:

    1. package com.example.station.util;
    2. import com.alibaba.excel.EasyExcel;
    3. import com.alibaba.excel.EasyExcelFactory;
    4. import com.example.station.model.Excel.abc;
    5. public class ExcelUtil {
    6. public static void main(String[] args) {
    7. String fileName = "C:\\Users\\Administrator\\Desktop\\abc.xlsx";
    8. // 读取Excel文件
    9. // 这里的abc.class是你要读取的实体类
    10. // new abclistener()是读取监听器
    11. // 这里的sheet()方法是指定读取的sheet页,默认是第1个
    12. // doRead()方法是读取Excel文件
    13. EasyExcel.read(fileName, abc.class, new abclistener()).sheet().doRead();
    14. }
    15. }

    以下为读取结果:

    写入Excel文档

    根据你要写入的结构创建实体类

    1. package com.example.station.model.Excel;
    2. import com.alibaba.excel.annotation.ExcelProperty;
    3. import com.alibaba.excel.annotation.format.DateTimeFormat;
    4. import lombok.Data;
    5. import java.util.Date;
    6. @Data
    7. public class abc {
    8. // 表头 通过注解 @ExcelProperty(value = "字符串") 来指定这一列的表头名称
    9. @ExcelProperty(value = "字符串")
    10. public String str;
    11. @ExcelProperty(value = "日期")
    12. public String date;
    13. @ExcelProperty(value = "数值")
    14. public int num;
    15. }
    1. package com.example.station.util;
    2. import com.alibaba.excel.EasyExcel;
    3. import com.example.station.model.Excel.abc;
    4. import lombok.extern.slf4j.Slf4j;
    5. import org.apache.commons.collections4.ListUtils;
    6. import java.util.*;
    7. @Slf4j
    8. public class ExcelUtil {
    9. public static void main(String[] args) {
    10. String fileName = "C:\\Users\\Administrator\\Desktop\\abc.xlsx";
    11. // 读取Excel文件
    12. // 这里的abc.class是你要读取的实体类
    13. // new abclistener()是读取监听器
    14. // 这里的sheet()方法是指定读取的sheet页,默认是第1个
    15. // doRead()方法是读取Excel文件
    16. EasyExcel.read(fileName, abc.class, new abclistener()).sheet().doRead();
    17. log.error("读取完成 开始写入");
    18. // 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭
    19. // 这里data()是要写入的数据
    20. EasyExcel.write(fileName, abc.class).sheet("Sheet1").doWrite(data());
    21. log.error("写入完成 开始读取");
    22. EasyExcel.read(fileName, abc.class, new abclistener()).sheet().doRead();
    23. }
    24. // 生成要插入的Excel数据
    25. private static List data() {
    26. List list = new ArrayList<>();
    27. for (int i = 0; i < 10; i++) {
    28. abc data = new abc();
    29. data.setStr("字符串" + i);
    30. data.setDate(new Date().toString());
    31. data.setNum(i+12);
    32. list.add(data);
    33. }
    34. return list;
    35. }
    36. }

    可以看到数据写入成功 !  

  • 相关阅读:
    C++核心基础教程之STL容器详解 list
    CloudCompare&PCL 点云添加高斯噪声
    [附源码]计算机毕业设计医院挂号住院管理系统Springboot程序
    深度学习和神经网络的介绍(一)
    软考 ----- UML设计与分析(上)
    多线程新手村3--多线程代码案例
    【性能测试】服务器优化
    Spring MVC 之MVC 体系结构、什么是SpringMVC
    JavaScript大作业——美食餐饮网站设计与实现(HTML+CSS+JavaScript)
    【JavaScript进阶之旅 ES6篇 第六章】函数默认值、this、箭头函数、箭头函数结合函数参数解构赋值、rest运算符
  • 原文地址:https://blog.csdn.net/qq_63525426/article/details/139350057