EasyExcel基本使用

一、EasyExcel

1. EasyExcel简介
1、Java领域解析、生成 Excel 比较有名的框架有 Apache POI、JXL 等,但都存在非常耗内存的问题,如果你的系统并发量不大可能还行,但一旦并发上来后一定会 OOM 或者 JVM 频繁的 full gc。
2、EasyExcel 是阿里巴巴开源的一个 Excel 处理框架,以使用简单、节省内存著称。EasyExcel 能大大减少占用内存的主要原因是在解析Excel时没有将文件数据一次性全部加载到内存中,而是从磁盘上一行行读取数据,逐个解析。
3、EasyExcel 采用一行一行的解析模式,并将一行的解析结果以观察者的模式通知处理(AnalysisEventListener)。
2. Excel导入导出的应用场景
1、数据导入:减轻录入工作量
2、数据导出:统计信息归档
3、数据传输:异构系统之间数据传输

二、使用EasyExcel写Excel

1. 创建一个普通的maven项目
导入依赖

<dependencies>
    <!-- https://mvnrepository.com/artifact/com.alibaba/easyexcel -->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>easyexcel</artifactId>
        <version>2.1.1</version>
    </dependency>
</dependencies>

2. 创建实体类

设置表头和添加的数据字段

import com.alibaba.excel.annotation.ExcelProperty;
​
//设置表头和添加的数据字段
public class DemoData {
    //设置表头名称
    @ExcelProperty("学生编号")
    private int sno;
    
    //设置表头名称
    @ExcelProperty("学生姓名")
    private String sname;
​
    public int getSno() {
        return sno;
    }
​
    public void setSno(int sno) {
        this.sno = sno;
    }
​
    public String getSname() {
        return sname;
    }
​
    public void setSname(String sname) {
        this.sname = sname;
    }
​
    @Override
    public String toString() {
        return "DemoData{" +
                "sno=" + sno +
                ", sname='" + sname + '\'' +
                '}';
    }
}

3 、实现写操作
(1)创建方法循环设置要添加到Excel的数据

//循环设置要添加的数据,最终封装到list集合中
private static List<DemoData> data() {
    List<DemoData> list = new ArrayList<DemoData>();
    for (int i = 0; i < 10; i++) {
        DemoData data = new DemoData();
        data.setSno(i);
        data.setSname("张三"+i);
        list.add(data);
    }
    return list;
}

(2)实现最终的添加操作(写法一)

public static void main(String[] args) throws Exception {
    // 写法1
    String fileName = "F:\\11.xlsx";
    // 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭
    // 如果这里想使用03 则 传入excelType参数即可
    EasyExcel.write(fileName, DemoData.class).sheet("写入方法一").doWrite(data());
}

(3)实现最终的添加操作(写法二)

public static void main(String[] args) throws Exception {
    // 写法2,方法二需要手动关闭流
    String fileName = "F:\\112.xlsx";
    // 这里 需要指定写用哪个class去写
    ExcelWriter excelWriter = EasyExcel.write(fileName, DemoData.class).build();
    WriteSheet writeSheet = EasyExcel.writerSheet("写入方法二").build();
    excelWriter.write(data(), writeSheet);
    /// 千万别忘记finish 会帮忙关闭流
    excelWriter.finish();
}

三、使用EasyExcel读Excel

1. 创建实体类

import com.alibaba.excel.annotation.ExcelProperty;
public class ReadData {
    //设置列对应的属性
    @ExcelProperty(index = 0)
    private int sid;
    
    //设置列对应的属性
    @ExcelProperty(index = 1)
    private String sname;
​
    public int getSid() {
        return sid;
    }
    public void setSid(int sid) {
        this.sid = sid;
    }
    public String getSname() {
        return sname;
    }
    public void setSname(String sname) {
        this.sname = sname;
    }
    @Override
    public String toString() {
        return "ReadData{" +
                "sid=" + sid +
                ", sname='" + sname + '\'' +
                '}';
    }
}

2. 创建读取操作的监听器

import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.alibaba.excel.exception.ExcelDataConvertException;
import com.sun.scenario.effect.impl.sw.sse.SSEBlend_SRC_OUTPeer;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
​
//创建读取excel监听器
public class ExcelListener extends AnalysisEventListener<ReadData> {
​
    //创建list集合封装最终的数据
    List<ReadData> list = new ArrayList<ReadData>();
​
    //一行一行去读取excle内容
    @Override
    public void invoke(ReadData user, AnalysisContext analysisContext) {
       System.out.println("***"+user);
        list.add(user);
    }
​
    //读取excel表头信息
    @Override
    public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {
        System.out.println("表头信息:"+headMap);
    }
​
    //读取完成后执行
    @Override
    public void doAfterAllAnalysed(AnalysisContext analysisContext) {
    }
}

3. 调用实现最终的读取

   public static void main(String[] args) throws Exception {
​
        // 写法1:
        String fileName = "F:\\01.xlsx";
        // 这里 需要指定读用哪个class去读,然后读取第一个sheet 文件流会自动关闭
        EasyExcel.read(fileName, ReadData.class, new ExcelListener()).sheet().doRead();
​
        // 写法2:
        InputStream in = new BufferedInputStream(new FileInputStream("F:\\01.xlsx"));
        ExcelReader excelReader = EasyExcel.read(in, ReadData.class, new ExcelListener()).build();
        ReadSheet readSheet = EasyExcel.readSheet(0).build();
        excelReader.read(readSheet);
        // 这里千万别忘记关闭,读的时候会创建临时文件,到时磁盘会崩的
        excelReader.finish();
}

四、前端页面

1. 编辑Excel模板
2. 将文件上传至阿里云OSS
在这里插入图片描述
3、添加路由

// 课程分类管理
{
  path: '/edu/subject',
  component: Layout,
  redirect: '/edu/subject/list',
  name: 'Subject',
  meta: { title: '课程分类管理', icon: 'nested' },
  children: [
    {
      path: 'list',
      name: 'EduSubjectList',
      component: () => import('@/views/edu/subject/list'),
      meta: { title: '课程分类列表' }
    },
    {
      path: 'import',
      name: 'EduSubjectImport',
      component: () => import('@/views/edu/subject/import'),
      meta: { title: '导入课程分类' }
    }
  ]
},

4. 添加vue组件
在这里插入图片描述

5. 表单组件import.vue
js定义数据

<script>
export default {
​
  data() {
    return {
      BASE_API: process.env.BASE_API, // 接口API地址
      OSS_PATH: process.env.OSS_PATH, // 阿里云OSS地址
      fileUploadBtnText: '上传到服务器', // 按钮文字
      importBtnDisabled: false, // 按钮是否禁用,
      loading: false
    }
  }
}
</script>

template

<template>
  <div class="app-container">
    <el-form label-width="120px">
      <el-form-item label="信息描述">
        <el-tag type="info">excel模版说明</el-tag>
        <el-tag>
          <i class="el-icon-download"/>
          <a :href="OSS_PATH + '/excel/%E8%AF%BE%E7%A8%8B%E5%88%86%E7%B1%BB%E5%88%97%E8%A1%A8%E6%A8%A1%E6%9D%BF.xls'">点击下载模版</a>
        </el-tag>
​
      </el-form-item>
​
      <el-form-item label="选择Excel">
        <el-upload
          ref="upload"
          :auto-upload="false"
          :on-success="fileUploadSuccess"
          :on-error="fileUploadError"
          :disabled="importBtnDisabled"
          :limit="1"
          :action="BASE_API+'/admin/edu/subject/import'"
          name="file"
          accept="application/vnd.ms-excel">
          <el-button slot="trigger" size="small" type="primary">选取文件</el-button>
          <el-button
            :loading="loading"
            style="margin-left: 10px;"
            size="small"
            type="success"
            @click="submitUpload">{{ fileUploadBtnText }}</el-button>
        </el-upload>
      </el-form-item>
    </el-form>
  </div>
</template>

js上传方法

methods: {
    submitUpload() {
      this.fileUploadBtnText = '正在上传'
      this.importBtnDisabled = true
      this.loading = true
      this.$refs.upload.submit()
    },
​
    fileUploadSuccess(response) {
      
    },
​
    fileUploadError(response) {
      
    }
}

回调函数

fileUploadSuccess(response) {
    if (response.success === true) {
    this.fileUploadBtnText = '导入成功'
    this.loading = false
    this.$message({
        type: 'success',
        message: response.message
    })
    } 
},
​
fileUploadError(response) {
    this.fileUploadBtnText = '导入失败'
    this.loading = false
    this.$message({
    type: 'error',
    message: '导入失败'
    })
}
EasyExcel是一个Java操作Excel文件的工具库,它基于Apache POI实现。它提供了简单易用的方法来读取、写入和处理Excel文件。下面是EasyExcel基本教程: 1. 添加EasyExcel依赖:首先,在你的项目中添加EasyExcel的依赖。可以在你的项目的pom.xml文件中添加以下依赖项: ```xml <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>2.2.12</version> </dependency> ``` 2. 读取Excel文件:使用EasyExcel可以简单地读取Excel文件的内容。通过`read`方法可以读取Excel中的数据并将其映射到Java对象中。以下是一个简单的读取示例: ```java String fileName = "path/to/excel.xlsx"; List<Object> data = EasyExcel.read(fileName).sheet().doReadSync(); ``` 3. 写入Excel文件:使用EasyExcel可以将数据写入Excel文件中。通过`write`方法可以将Java对象的数据写入到Excel文件中。以下是一个简单的写入示例: ```java String fileName = "path/to/excel.xlsx"; List<Object> data = new ArrayList<>(); // 填充数据 EasyExcel.write(fileName).sheet().doWrite(data); ``` 4. 调整行高、列宽和样式:EasyExcel提供了方法来调整Excel文件中的行高、列宽和样式。你可以使用`setXXX`方法来设置行高、列宽、背景色、字体大小等样式。以下是一个示例: ```java TableStyle style = new TableStyle(); // 创建样式对象 style.setTableContentBackGroundColor(IndexedColors.WHITE); // 设置表格内容的背景色为白色 style.setTableContentFontName("Arial"); // 设置表格内容的字体为Arial style.setTableContentFontSize(12); // 设置表格内容的字体大小为12 WriteSheet sheet = EasyExcel.writerSheet().build(); // 创建Sheet对象 sheet.setTableStyle(style); // 设置Sheet的样式 EasyExcel.write(fileName).withTemplate(templateFileName).sheet().doWrite(data); ``` 需要注意的是,EasyExcel的控制方式与使用原生POI类似,但相对来说更加简洁易用。另外,EasyExcel能够处理大文件时,会减少内存消耗,并且不容易发生内存溢出的情况。 总结一下,EasyExcel是一个方便易用的Java操作Excel文件的工具库,它提供了简单的读取和写入方法,并且支持调整行高、列宽和样式。它基于Apache POI实现,并且能够处理大文件时减少内存消耗。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值