Java Apache POI Excel文件在数据库对象中的映射是否具有类似HeaderColumn策略的功能?
我的应用程序允许FE中的用户手动将HeaderColumn映射到数据库的字段。至少这是我的意图和目标
我用OpenCSV和HeaderColumnNameTranslateMappingStrategy
成功地为CSV文件做了这项工作。现在我想对Excel文件这样做。xls或。xlsx也是。
后端使用Spring Boot,以JSONArray的形式获取整个文件和映射。这些列可以是数据库中每一个现有实体的列:例如商品、商店、收据等。如果名为EAN
的列现在有映射文章。ean,可能还有一个名为Size
的列,该列映射到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("");
}
但我不知道如何将每个单元格值映射到我的jsonArray映射。像HeaderColumnNameTranslateMappingStrategy
这样的东西不存在,或者我是瞎子
# 1 楼答案
我间接解决了。我建议您将Excel文件(.xls或.xlsx)转换为CSV(本地字符串),并从那里执行
HeaderColumnNameTranslateMappingStrategy
下面是我如何将其转换为csv的
此代码仅适用于。xlsx文件!对于xls文件使用HSSF