EasyExcel做简单的导入导出
Y.准备
excel表
代码+测试(idea+postman)
E.代码部分
E-Y. pom导包
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.2.5</version>
</dependency>
E-E. TestProperty EasyExcel模板文件
@Data
public class TestProperty {
@ExcelProperty(value = "ID", index = 0)
private Long id;
@ExcelProperty(value = "名字", index = 1)
private String name;
@ExcelProperty(value = "年龄", index = 2)
private Integer age;
}
E-S. EasyExcelListener自定义事件监听类继承AnalysisEventListener
public final class EasyExcelListener<T> extends AnalysisEventListener<T>{
/**
* 自定义用于暂时存储data
* 可以通过实例获取该值
*/
private List<T> datas = new ArrayList<>();
/**
* 每解析一行都会回调invoke()方法
* @param object 读取后的数据对象
* @param context 内容
*/
@Override
@SuppressWarnings("unchecked")
public void invoke(Object object, AnalysisContext context) {
T map = (T) object;
//数据存储到list,供批量处理,或后续自己业务逻辑处理。
datas.add(map);
}
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
//解析结束销毁不用的资源
//注意不要调用datas.clear(),否则getDatas为null
}
/**
* 返回数据
* @return 返回读取的数据集合
**/
public List<T> getDatas() {
return datas;
}
/**
* 设置读取的数据集合
* @param datas 设置读取的数据集合
**/
public void setDatas(List<T> datas) {
this.datas = datas;
}
}
E-++S++. Excel数据简单导入
@PostMapping(value = "/import")
public List<TestProperty> importEntity(MultipartFile file) throws IOException {
TestPropertyListener<TestProperty> listener = new TestPropertyListener<>();
//headRowNumber(1)从第2行开始读取
ExcelReader excelReader= EasyExcel.read(file.getInputStream(), TestProperty.class, listener).headRowNumber(1).build();
excelReader.readAll();
List<TestProperty> list=listener.getDatas();
//根据list做业务逻辑处理
System.out.println(list);
return list;
}
E-W. Excel数据简单导出 生成excel表 返回本地文件路径(服务器请自行修改)
@PostMapping(value = "/export")
public String importEntity() {
//组装数据
List<TestProperty> pros = new ArrayList<>();
for (int i = 0; i < 10; i++) {
TestProperty te = new TestProperty();
te.setAge(23);
te.setId((long) Math.abs(UUID.randomUUID().hashCode()));
te.setName("a" + i);
}
//生成excel
try {
String fileName = "excel-" + UUID.randomUUID().toString().replace("-","") + ".xlsx";
String tempPath = Thread.currentThread().getContextClassLoader().getResource("").getPath() + "tempFile/";
File outfile = new File(tempPath);
if (!outfile.exists()) {
boolean isMakDir = outfile.mkdirs();
if (isMakDir) {
System.out.println("===创建文件夹成功");
}
}
String filePath = tempPath + fileName;
//生成excel
EasyExcel.write(filePath, TestProperty.class).sheet("sheet").doWrite(pros);
System.out.println(filePath);
return filePath;
} catch (Exception e) {
System.out.println(e);
} finally {
//关闭流
}
return null;
}
S.额外部分
Data注解包
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>