com.alibaba easyexcel2.1.1 com.alibaba fastjson1.2.28
package com.baimi.code; import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.event.AnalysisEventListener; import com.alibaba.fastjson.JSON; import java.util.ArrayList; import java.util.List; import java.util.Map; public class NoModleDataListener extends AnalysisEventListener
private static final int BATCH_COUNT = 5;
List> list = new ArrayList>();
@Override
public void invoke(Map data, AnalysisContext context) {
LOGGER.info("解析到一条数据:{}", JSON.toJSONString(data));
list.add(data);
if (list.size() >= BATCH_COUNT) {
saveData();
list.clear();
}
}
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
saveData();
LOGGER.info("所有数据解析完成!");
}
private void saveData() {
LOGGER.info("{}条数据,开始存储数据库!", list.size());
LOGGER.info("存储数据库成功!");
}
package com.baimi.code;
import com.alibaba.excel.EasyExcel;
public class TestMain {
public static void main(String args[]) throws Exception {
String fileName = "D:\data\核销明细汇总-20220426.xlsx";
// 这里 只要,然后读取第一个sheet 同步读取会自动finish
EasyExcel.read(fileName, new NoModleDataListener()).sheet().doRead();
}
}
public class ExceListener extends AnalysisEventListener
@Override
public void invoke(UserData userData, AnalysisContext analysisContext) {
System.out.println(userData);
}
@Override
public void invokeHeadMap(Map
super.invokeHeadMap(headMap, context);
System.out.println("表头信息:" + headMap);
}
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
}
}
@Test
public void complexHeaderRead() {
String fileName = TestFileUtil.getPath() + "demo" + File.separator + "demo.xlsx";
// 这里 需要指定读用哪个class去读,然后读取第一个sheet
EasyExcel.read(fileName, DemoData.class, new DemoDataListener()).sheet()
// 这里可以设置1,因为头就是一行。如果多行头,可以设置其他值。不传入也可以,因为默认会根据DemoData 来解析,他没有指定头,也就是默认1行
.headRowNumber(1).doRead();
}
Java EasyExcel写入Excel数据指定写入数据实体中列(忽略或包含)的方法-CJavaPy



