Расширение Spring Batch для Excel
Чтобы прочитать файл Excel, состоящий из 17 столбцов и одной строки, я использовал пакет Spring расширения excel. проблема в том, что когда я запускаю приложение, оно может прочитать первые 9 столбцов после этого индекса, я получаю сообщение об ошибке:
Caused by: java.lang.ArrayIndexOutOfBoundsException: Index 10 out of bounds for length 9
at org.springframework.batch.item.excel.support.rowset.DefaultRowSet.getColumnValue(DefaultRowSet.java:71) ~[classes/:na]
at com.example.demo.mappers.UtilisateurExcelRowMapper.mapRow(UtilisateurExcelRowMapper.java:23) ~[classes/:na]
at com.example.demo.mappers.UtilisateurExcelRowMapper.mapRow(UtilisateurExcelRowMapper.java:1) ~[classes/:na]
at org.springframework.batch.item.excel.AbstractExcelItemReader.doRead(AbstractExcelItemReader.java:70) ~[classes/:na]
... 50 common frames omitted
под моим кодом
@Bean
PoiItemReader<Utilisateur> excelUtilisateurReader() {
PoiItemReader<Utilisateur> reader = new PoiItemReader<Utilisateur>();
reader.setLinesToSkip(5);
reader.setMaxItemCount(1);
reader.setRowMapper(excelRowMapper());
return reader;
}
обратите внимание, что мой файл содержит 17 столбцов, все заполнены
1 ответ
Похоже, проблема библиотеки spring-batch-excel. Почему-то не учитываются пустые ячейки, например:
ВRowMapper
учебный класс, RowSet
объект для 3 и 4 рядов будет содержать всего 4 элемента (и вы получите ArrayIndexOutOfBoundsException
), но RowSet
предмет на 5 ряд - 8 шт.
Я исправил это, добавив проверку в RowMapper
:
public class MyRowMapper implements RowMapper<MyDto> {
@Override
public MyDto mapRow(RowSet rowSet) throws Exception {
MyDto dto = new MyDto();
dto.setStart(checkAndGetCell(rowSet, 2));
dto.setEnd(checkAndGetCell(rowSet, 3));
dto.setStatus(checkAndGetCell(rowSet, 6));
return dto;
}
private String checkAndGetCell(RowSet rowSet, Integer index) {
return rowSet.getProperties().size() > index ? rowSet.getColumnValue(index) : "";
}
}