导出:首先我们需要导出的数据得有个实体类,就是导出的表
@Data
public class DemoData {
@ExcelProperty("字符串标题")
private String string;
@ExcelProperty("日期标题")
private Date date;
@ExcelProperty("数字标题")
private Double doubleData;
//忽略这个字段(不需要这个字段)
@ExcelIgnore
private String ignore;
}
public class Demo {
//文件存放的路径
String PATH = "D:\\demo\\Excel";
//模拟前端或者数据库发过来的数据
//一般List<DemoData> list = DataMapper.selectList();
//把这个list放到下面的.doWrite()方法中
private List<DemoData> data() {
List<DemoData> list = new ArrayList<DemoData>();
for (int i = 0; i < 10; i++) {
DemoData data = new DemoData();
data.setString("字符串" + i);
data.setDate(new Date());
data.setDoubleData(0.56);
list.add(data);
}
return list;
}
@Test
public void simpleWrite() {
String fileName = PATH + "EasyTest.xlsx";
/*
* 这里 需要指定用哪个class去写(就是指定实体类的class文件)
* write(fileName,格式类)
* sheet (表名)
* doWrite(这里是数据 就是数据库查出来的数据)
*/
EasyExcel.write(fileName, DemoData.class).sheet("模板").doWrite(data());
}
}
导入:
导入需要建立一个监听器并继承 AnalysisEventListener 重写 invoke和doAfterAllAnalysed方法
public class DemoDataListener extends AnalysisEventListener<DemoData> {
private static final int BATCH_COUNT= 5;
List<DemoData> list = new ArrayList<>();
//invoke 反射
@Override
public void invoke(DemoData demoData, AnalysisContext analysisContext) {
list.add(demoData);
if (list.size()>= BATCH_COUNT){
saveData(); //持久化逻辑
list.clear(); //存储完成清理list
}
}
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
saveData();
System.out.println("所有数据解析完成");
}
//insert into 操作 存入数据库
private void saveData() {
demoDao.save(list);
}
}
然后写导入的方法:
@Test
public void simpleRead(){
/*
*有个重要的点 DemoDataListener 不能被spring管理,每次读取Excel都要new 然后里面用到
*/
String fileName = PATH+"EasyTest.xlsx";
//重点注意读取的逻辑
EasyExcel.read(fileName,DemoData.class,new DemoDataListener()).sheet().doRead();
}
}