Мое приложение позволяет пользователю в FE вручную сопоставлять headerColumns с полями базы данных. По крайней мере, это мое намерение и цель.
Я сделал это для файлов CSV с OpenCSV и HeaderColumnNameTranslateMappingStrategy
успешно. Теперь я хочу сделать это для файлов Excel, таких как .xls или .xlsx. Бэкэнд использует Spring Boot и получает весь файл и отображение в виде JSONArray. Столбцы могут относиться к каждой существующей сущности базы данных: например, статья, магазин, квитанция или что-то еще. Если столбец с именем EAN
теперь имеет сопоставление Article.ean и, возможно, также столбец с именем Size
, который сопоставлен с Article.size, тогда должен быть создан объект класса Article и остальные поля класса Articleдолжно быть пустым.
Таким образом, все строки должны быть повторены, и объекты сопоставленных типов должны быть созданы и помещены в список, а затем сохранены в базе данных.
Моя попытка пока состоит в том, чтобы прочитать всестроки, которые работают довольно хорошо:
// Create Workbook instance holding reference to .xlsx file
XSSFWorkbook workbook = new XSSFWorkbook(file.getInputStream());
// Get first/desired sheet from the workbook
XSSFSheet sheet = workbook.getSheetAt(0);
// Iterate through each rows one by one
Iterator<Row> rowIterator = sheet.iterator();
while (rowIterator.hasNext()) {
Row row = rowIterator.next();
// For each row, iterate through all the columns
Iterator<Cell> cellIterator = row.cellIterator();
while (cellIterator.hasNext()) {
Cell cell = cellIterator.next();
// Check the cell type and format accordingly
switch (cell.getCellType()) {
case NUMERIC:
System.out.print(cell.getNumericCellValue() + "\t");
break;
case STRING:
System.out.print(cell.getStringCellValue() + "\t");
break;
case BLANK:
break;
case BOOLEAN:
break;
case ERROR:
break;
case FORMULA:
break;
case _NONE:
break;
default:
break;
}
}
System.out.println("");
}
Но я понятия не имею, как сопоставить каждое значение cellValue с отображением моего jsonArray. Что-то вроде HeaderColumnNameTranslateMappingStrategy
не существует или я слепой?