Я читаю файл Excel с некоторыми атрибутами двойного значения, используя APACHE POI, и сопоставляю его с POJO, используя java и пружину.
public List<Double> readDataFromExcel(MultipartFile file) {
Workbook workbook = getWorkBook(file);
List<Double> values = new ArrayList<>();
for (int i = 0 ; i < workbook.getNumberOfSheets(); i++) {
Sheet mySheet = workbook.getSheetAt(i);
Iterator<Row> rows = mySheet.iterator();
rows.next();
while (rows.hasNext()) {
Row row = rows.next();
if (isRowEmpty(row)) {
continue;
}
values = getItemCellValue(row, file, workbook);
}
}
return values;
}
Я пытаюсь добиться чтения весь файл сразу проверяет его на наличие пустых чисел c ячеек или неверных данных, перехватывает все ошибки или исключения и отображает их пользователю.
Итак, у меня есть два варианта использования: - проверка данных на пустые Пронумерованные ячейки c - проверьте правильность числовых данных c, тогда мне нужно будет отловить все ошибки проверки в списке, передать его контроллеру для отображения его пользователю.
На данный момент, пустые ячейки преобразуются в 0,0 значения, а строки с неверными данными пропускаются при разборе.
- это метод, который я использую для чтения ячеек и установки своих атрибутов.
private List<Double> getItemCellValue(Row row, MultipartFile file, Workbook workbook) {
Item item = new Item();
List<Double> invalidData = new ArrayList<>();
try {
if (row.getCell(0).getCellType() == Cell.CELL_TYPE_NUMERIC) {
item.setItemNumber((float) row.getCell(0).getNumericCellValue());
}
if (row.getCell(1).getCellType() == Cell.CELL_TYPE_NUMERIC) {
item.setHeight(row.getCell(1).getNumericCellValue());
}
if (row.getCell(2).getCellType() == Cell.CELL_TYPE_NUMERIC) {
item.setWidth(row.getCell(2).getNumericCellValue());
}
if (row.getCell(3).getCellType() == Cell.CELL_TYPE_NUMERIC) {
item.setLength(row.getCell(3).getNumericCellValue());
}
item.setFileType(FilenameUtils.getExtension(file.getOriginalFilename()));
itemRepository.save(item);
} catch (NullPointerException e) {
e.printStackTrace();
}
return invalidData;
}
Спасибо