第一步:添加easyExcel依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.2.2</version>
</dependency>
第二步:添加实体类(该类用于excel表头字段名称)
package com.prophesy.bean.common;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.metadata.BaseRowModel;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class WriteModel extends BaseRowModel implements Serializable {
@ExcelProperty("员工姓名")
private String name;
@ExcelProperty("员工年龄")
private Integer age;
@ExcelProperty("密码")
private String password;
}
第三步:测试导出d
@Test
public void writeExcel1() throws Exception {
// 文件输出位置
OutputStream out = new FileOutputStream("D:\\photo\\dd.xlsx");
ExcelWriter writer = EasyExcelFactory.getWriter(out);
// 写仅有一个 Sheet 的 Excel 文件, 此场景较为通用
Sheet sheet1 = new Sheet(1, 0, com.prophesy.bean.common.WriteModel.class);
// 第一个 sheet 名称
sheet1.setSheetName("第一个sheet");
// 写数据到 Writer 上下文中
// 入参1: 创建要写入的模型数据
// 入参2: 要写入的目标 sheet
writer.write(createModelList(), sheet1);
// 将上下文中的最终 outputStream 写入到指定文件中
writer.finish();
// 关闭流
out.close();
}
private List<WriteModel> createModelList(){
ArrayList<WriteModel> writeModels = new ArrayList();
for (int i = 0; i <100 ; i++) {
WriteModel writeModel = new WriteModel();
writeModel.setAge(100);
writeModel.setName("测试"+i);
writeModel.setPassword(":"+i);
writeModels.add(writeModel);
}
return writeModels;
}
第四步:测试导入
@Test
public void et() throws Exception{
List<WriteModel> list = new ArrayList<>();
/*
* EasyExcel 读取 是基于SAX方式
* 因此在解析时需要传入监听器
*/
// 第一个参数 为 excel文件路径
// 读取时的数据类型
// 监听器
EasyExcel.read("D:\\WriteModel" + ExcelTypeEnum.XLSX.getValue(), WriteModel.class, new AnalysisEventListener<WriteModel>() {
// 每读取一行就调用该方法
@Override
public void invoke(WriteModeldata, AnalysisContext context) {
list.add(data);
}
// 全部读取完成就调用该方法
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
System.out.println("读取完成");
}
}).sheet().doRead();
list.forEach(System.out::println);
}