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 列,全部已填充
看来是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)
| 归档时间: |
|
| 查看次数: |
2058 次 |
| 最近记录: |