easyexcel导入时读不到数据_EasyExcel读取跨行单元格数据为空的解决办法

​目标excel文件内容如下

​由于A列的“Y00001”和C列的数据是B4,B5,B6共用的数据项,我理想中的情况是easyexcel在做读取操作时,在读取三行数据时都会把A列和C列的数据给读出来。但是在读取的时候,只有第一次读取能把A、C列的数据读取出来,后面两次读取A、C列的值为空。目前没有从根本上找到原因,那就只能从程序的设计上去解决这个问题了。

​通过EasyExcel读取目标文件

EasyExcel.read("D:\\Users\\admin\\Documents\\Tencent Files\\1430424583\\FileRecv\\demo.xls", new FaguiSheet()).sheet().doRead();

​解决思路,如果A、C列值找不到了的话,就判定这是个跨行数据,就复用之前读取的数据,需要用一个Map集合去存储之前读取的有效数据。

​ReadListener实现类

class FaguiSheet extends AnalysisEventListener> {

// 所有要插入的数据

private List datas = new ArrayList<>();

// 缓存上一次跨行数据的有效数据

private Map preContent;

@Override

public void invoke(Map o, AnalysisContext analysisContext) {

DemoModel model = new DemoModel();

String weifaxingwei = o.get(2);

String weifantiaokuan = o.get(3);

String chufayiju = o.get(4);

String weifachengdu = o.get(5);

String consequence = o.get(6);

String chufabiaozhun = o.get(7);

// 如果数据是空的话,从缓存对象中取值

if (StringUtils.isBlank(weifaxingwei)) {

weifaxingwei = preContent.get(2);

}

if (StringUtils.isBlank(weifantiaokuan)) {

weifantiaokuan = preContent.get(3);

}

if (StringUtils.isBlank(chufayiju)) {

chufayiju = preContent.get(4);

}

if (StringUtils.isBlank(weifachengdu)) {

weifachengdu = preContent.get(5);

}

if (StringUtils.isBlank(consequence)) {

consequence = preContent.get(6);

}

if (StringUtils.isBlank(chufabiaozhun)) {

chufabiaozhun = preContent.get(7);

}

model.setFaguibianhao(faguibianhao);

model.setWeifaxingwei(weifaxingwei);

model.setWeifantiaokuan(weifantiaokuan);

model.setChufayiju(chufayiju);

model.setWeifachengdu(weifachengdu);

model.setConsequence(consequence);

model.setChufabiaozhun(chufabiaozhun);

// 将数据放入list

datas.add(model);

// 复用跨行数据的实现

String uniqueKey = o.get(0);

// 如果A列的值为空,那么说明这是跨行列,如果取的值不是空,那说明这是第一次读取跨行列数据

// 如果preContent为空,说明这是第一次读取sheet表格的数据

if (!StringUtils.isBlank(uniqueKey) || preContent == null) {

preContent = o;

}

}

/**

* 表格数据解析完之后调用

*/

@Override

public void doAfterAllAnalysed(AnalysisContext analysisContext) {

for (DemoModel model : datas) {

// 往数据库里插入数据

demoMapper.insertSelective(model);

}

}

}

​数据插入成功

​当前EasyExcel版本2.1.3,不知道后续版本会不会修复这个问题,先在这记录一下

你可能感兴趣的:(easyexcel导入时读不到数据_EasyExcel读取跨行单元格数据为空的解决办法)