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();
}
}
运行程序 , 执行效果