Spring批量Excel扩展

Eng*_*pro 6 java spring spring-batch spring-boot spring-batch-excel

为了读取由 17 列和一行组成的 Excel 文件,我使用了 Excel 扩展 Spring Batch。问题是,当我运行应用程序时,它会读取此索引后的前 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
Run Code Online (Sandbox Code Playgroud)

在我的代码下面

@Bean
PoiItemReader<Utilisateur> excelUtilisateurReader() {
    PoiItemReader<Utilisateur> reader = new PoiItemReader<Utilisateur>();
    reader.setLinesToSkip(5);
    reader.setMaxItemCount(1);
    reader.setRowMapper(excelRowMapper());
    return reader;
}
Run Code Online (Sandbox Code Playgroud)

请注意,我的文件包含 17 列,全部已填充

And*_*kyy 1

看来是spring-batch-excel库的问题。由于某种原因,它没有考虑空单元格,例如: 在此输入图像描述RowMapper课堂上,RowSet3 行和 4 行的对象将仅包含 4 个项目(您将得到ArrayIndexOutOfBoundsException),但RowSet5 行的对象将包含 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) : "";
    }
}
Run Code Online (Sandbox Code Playgroud)