Я перебираю данные книги, прочитанные с нескольких листов, и объединяю все строки в одной таблице, используя приведенный ниже код.
public boolean readDataFromExcel(MultipartFile file) {
Workbook workbook = getWorkBook(file);
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;
}
getItemCellValue(row, file, workbook);
}
}
return true;
}
метод getItemCellValue получает тип ячейки и устанавливает для него соответствующий атрибут
private boolean getItemCellValue(Row row, MultipartFile file, Workbook workbook) {
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(15).getCellType() == Cell.CELL_TYPE_STRING) {
item.setItemDesc(row.getCell(15).getStringCellValue());
}
itemRepository.save(item);
} catch (NullPointerException e) {
e.printStackTrace();
}
return true;
}
У меня есть атрибут enum (Location), который отображается, например, на 2 местоположения, и мой входной файл должен иметь 2 разных листа (вкладки). Цель здесь - установить местоположение элемента на листе, с которого он был прочитан и проанализирован.
Пример. например, если у меня есть 2 листа, а item1 анализируется из sheet1, а item2 - из sheet2, тогда в поле местоположения должно быть указано правильное местоположение, из которого выходит строка элемента (в данном случае - sheet1 или sheet2).
| item. | itemNo. | location |
|:-----------|------------:|:------------:|
| item1 | 1111 | LOCATION1 |
| item2 | 2222 | LOCATION2 |
решение, вероятно, заключалось бы в том, чтобы определить, к какому листу относится каждая строка и установить там местоположение, но тогда я не смог найти ничего, что возвращает это в APACHE POI?