EasyExcel 读写操作

 

EasyExcel 是是阿里巴巴开源的一个 excel 处理框架 , 基于Java 语言开发、操作简单, 节省内存 , 占用内存较少的原因是在解析 Excel 时没有将文件数据一次性全部加载到内存中,而是从磁盘上一行行读取数据,逐个解析

 EasyExcel 对 Excel 的写操作


1. pom 中引入相关依赖

<dependencies>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel</artifactId>
            <version>2.1.1</version>
        </dependency>
</dependencies>

2. 创建一个学生类 Stu

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Stu {
//  index: 每行记录的学生编号从0开始
//  value: 表格每一列的列名
    @ExcelProperty(value = "学号",index = 0)
    private int sno;

    @ExcelProperty(value = "姓名",index = 1)
    private String sname;

}

3. 创建一个实现 Excel 写操作的类 Stu_write

public class Stu_write {
//    定义一个学生集合, 用于保存学生信息
    private static List<Stu> SaveStuData() {
        ArrayList<Stu> stuList = new ArrayList<>();
//    模拟向表格中添加学生数据,创建10个学生对象
        for (int i = 0; i < 10; i++) {
            Stu stu = new Stu();
            stu.setSno(i);
            stu.setSname("孙悟空" + i);
            stuList.add(stu);
        }
        return stuList;
    }



//    实现 EasyExcel 写操作
    public static void main(String[] args) {
//    定义一个要写入的路径 (这里我选择写到 C盘桌面上)
        String fileName = "C:\\Users\\Administrator\\Desktop\\学生列表.xlsx";
/*      使用 com.alibaba.excel 依赖包提供的 EasyExcel 的 write方法
        参数 :
        1. fileName:写入文件名
        2. Stu.class:要将哪个类?写进去
        3. sheet参数:就是说你当前写到表格中的那张表叫什么名字?如果不传入,默认就是sheet1
        doWrite(xxx): 该方法中传入xxx :你要写到表格的数据是xxx(对象..集合...)
*/
        EasyExcel.write(fileName, Stu.class).sheet("学生列表").doWrite(SaveStuData());
    }

}

运行程序 , 执行效果

1. 桌面上生成了一个表格文件

 2. 打开文件

 

 

EasyExcel 对 Excel 的读操作


读取操作的监听器

//  创建读取操作的监听器,继承AnalysisEventListener抽象类,重写此类中的读取数据的方法
public class Stu_Listener extends AnalysisEventListener<Stu> {
    //    创建一个list集合,封装学生数据
    List<Stu> list = new ArrayList<Stu>();

    //    invoke方法:逐行的读取 excle表格中的内容
    @Override
    public void invoke(Stu stu, AnalysisContext analysisContext) {
        System.out.println("正在读取数据" + stu);
        list.add(stu);
    }

    //    读取 excel 完成后,执行此方法
    @Override
    public void doAfterAllAnalysed(AnalysisContext analysisContext) {
        System.out.println("读取完成后执行此方法");
    }

//    调用真正实现读取的方法
    public static void main(String[] args) throws Exception {
//     指定读取路径,从哪个地方的excel读取,这里我选择的还是桌面位置上的excel中读取数据
        String fileName="C:\\Users\\Administrator\\Desktop\\学生列表.xlsx";
//     这里 指定读取哪个class,然后读取第一个sheet 文件流会自动关闭
//     创建读取组件对象 传入一个监听器对象(ReadListener<T>类型的) 此处就是我们创建的Stu_Listener
        EasyExcel.read(fileName, Stu.class, new Stu_Listener()).sheet().doRead();
    }
}

运行程序 , 执行效果

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,了解您的要求。关于easyexcel,可以参考以下步骤: 1. 引入依赖 ```xml <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>2.2.10</version> </dependency> ``` 2. 入Excel文件 ```java // 创建Excel对应的实体对象 public class DemoData { @ExcelProperty("姓名") private String name; @ExcelProperty("年龄") private Integer age; } // 入Excel public void writeExcel() { // 文件输出位置 String fileName = "demo.xlsx"; // 法1 EasyExcel.write(fileName, DemoData.class).sheet("模板").doWrite(dataList); // 法2 ExcelWriter excelWriter = null; try { excelWriter = EasyExcel.write(fileName, DemoData.class).build(); WriteSheet writeSheet = EasyExcel.writerSheet("模板").build(); excelWriter.write(dataList, writeSheet); } finally { if (excelWriter != null) { excelWriter.finish(); } } } ``` 3. 取Excel文件 ```java // 取Excel public void readExcel() { // 文件路径 String fileName = "demo.xlsx"; // 取sheet1内容 EasyExcel.read(fileName, DemoData.class, new DemoDataListener()).sheet().doRead(); // 取所有sheet内容 EasyExcel.read(fileName, DemoData.class, new DemoDataListener()).doReadAll(); } // 取监听器 public class DemoDataListener extends AnalysisEventListener<DemoData> { private List<DemoData> dataList = new ArrayList<>(); @Override public void invoke(DemoData data, AnalysisContext context) { // 取到一条数据时执行 dataList.add(data); } @Override public void doAfterAllAnalysed(AnalysisContext context) { // 取完成后执行 // 可以将dataList进行保存操作 } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值