Весеннее пакетное расширение Excel - PullRequest
4 голосов
/ 03 ноября 2019

, чтобы прочитать файл Excel, состоящий из 17 столбцов и одной строки. Я использовал Spring Excel для расширения 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 Ответ

0 голосов
/ 04 ноября 2019

Кажется, это проблема библиотеки spring-batch-excel . По какой-то причине он не учитывает пустые ячейки, например: enter image description here В классе 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) : "";
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...