Easyexcel 解析excel
一、Easyexcel解析excel(读):
1.1 简单方式:
①创建实体类;
②创建dao层;(编写save()方法)
③创建监听器 继承 AnalysisEventListener,实现里面的invoke()、doAfterAllAnalysed()方法,新建save()调用dao中save()方法;(invoke(实体类 data, AnalysisContext context)、doAfterAllAnalysed(AnalysisContext context)、demoDAO.save(list))
④测试调用Easyexcel解析excel文件 EasyExcel.read(文件路径, 实体类名.class, new DemoDataListener()).sheet().doRead();
EasyExcel.read(fileName, DemoData.class, new DemoDataListener()).sheet().doRead();
①创建实体类 DemoData.java:
@Data //【注1:使用此注解需要添加 lombok依赖】
public class DemoData {
private String string;
private Date date;
private Double doubleData;
}
②创建dao层 DemoDAO.java:(编写save()方法)
//假设这是个DAO存储,交给spring管理,若不用存储,则不需要这个类
public class DemoDAO {
public void save(List<DemoData> list) {
//持久化操作!
//如果是mybatis,尽量别直接调用多次insert,自己写一个mapper里面新建一个方法batchInsert,所有数据一次性插入
}
}
③创建监听器 DemoDataListener.java 继承 AnalysisEventListener:
public class Test extends AnalysisEventListener<DemoData>{
@Autowired
private DemoDAO demoDAO;
private static final int BATCH_COUNT=500;
List<DemoData> list=new ArrayList<DemoData>();
@Override
public void invoke(DemoData demoData, AnalysisContext analysisContext) {
list.add(demoData);
if (list.size()>=BATCH_COUNT){
saveData();
list.clear();
}
}
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
saveData();
}
private void saveData(){//存储数据库
demoDAO.save(list);
}
}
④测试调用Easyexcel.read()方法解析excel:
public class EasyTest {
String PATH = "E:\\IdeaWorkSpace\\Excel解析\\asd-easyExcel\\";
@Test
public void simpleRead() {
String fileName = PATH + "easyTest.xlsx";
EasyExcel.read(fileName, DemoData.class, new DemoDataListener()).sheet().doRead();
}
}
1.2 改写 EasyExcel,自定义为EasyExcelUtils.java:
见项目: “Excel解析\asd-easyExcel_work”
二、Easyexcel解析excel(写):
①创建实体类;(添加@ExcelProperty(“字符串标题”)注解)
②测试调用Easyexcel解析excel文件 EasyExcel.read(文件路径, 实体类名.class, new DemoDataListener()).sheet(excel的sheet表名称).doWrite(调用方法);
EasyExcel.write(fileName, DemoData.class).sheet("模板").doWrite(data());
①创建实体类 DemoData.java:
@Data //【注1:使用此注解需要添加 lombok依赖】
public class DemoData {
@ExcelProperty("字符串标题")
private String string;
@ExcelProperty("日期标题")
private Date date;
@ExcelProperty("数字标题")
private Double doubleData;
/* 忽略这个字段 */
@ExcelIgnore
private String ignore;
}
②测试调用Easyexcel.write()方法解析excel:
public class EasyTest {
String PATH = "E:\\IdeaWorkSpace\\Excel解析\\asd-easyExcel\\";
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去写,然后写到第一个sheet,名字为模板,然后文件流就会关闭
/*write(fileName,格式类)
sheet(要生成的excel中的sheet表名)
doWrite(数据)(调用上方的data()生成数据,实际操作中此数据是从前端或数据库中读取出的list数据,再绑定map即可 ) */
EasyExcel.write(fileName, DemoData.class).sheet("模板").doWrite(data());
}
}