怎么读取一个未知行未知列的excel并入库,字段不确定有几个,用java+springboot实现
时间: 2024-03-25 15:39:40 浏览: 200
JAVA读取excel
你可以使用 Apache POI 库来读取未知行未知列的 Excel 文件。以下是一个示例代码,可以读取 Excel 文件并将其插入到数据库中。
1. 添加 Maven 依赖
```
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.1.2</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.2</version>
</dependency>
```
2. 读取 Excel 文件
```
try (InputStream inputStream = new FileInputStream(new File("path/to/excel/file.xlsx"))) {
Workbook workbook = new XSSFWorkbook(inputStream); // 支持 .xlsx 格式
Sheet sheet = workbook.getSheetAt(0);
Iterator<Row> rowIterator = sheet.iterator();
List<String> headers = new ArrayList<>();
if (rowIterator.hasNext()) {
Row headerRow = rowIterator.next();
Iterator<Cell> cellIterator = headerRow.cellIterator();
while (cellIterator.hasNext()) {
Cell cell = cellIterator.next();
headers.add(cell.getStringCellValue()); // 读取表头
}
}
List<Map<String, Object>> rows = new ArrayList<>();
while (rowIterator.hasNext()) {
Row row = rowIterator.next();
Iterator<Cell> cellIterator = row.cellIterator();
Map<String, Object> rowData = new HashMap<>();
int index = 0;
while (cellIterator.hasNext()) {
Cell cell = cellIterator.next();
rowData.put(headers.get(index), getCellValue(cell)); // 读取单元格数据
index++;
}
rows.add(rowData);
}
} catch (IOException e) {
// 处理异常
}
private Object getCellValue(Cell cell) {
switch (cell.getCellType()) {
case NUMERIC:
return cell.getNumericCellValue();
case STRING:
return cell.getStringCellValue();
case BOOLEAN:
return cell.getBooleanCellValue();
case FORMULA:
return cell.getCellFormula();
case BLANK:
return "";
default:
return "";
}
}
```
3. 将数据插入到数据库中
```
@Autowired
private JdbcTemplate jdbcTemplate;
for (Map<String, Object> row : rows) {
String sql = "INSERT INTO table_name (" + String.join(",", row.keySet()) + ") VALUES (" + String.join(",", Collections.nCopies(row.size(), "?")) + ")";
Object[] values = row.values().toArray();
jdbcTemplate.update(sql, values);
}
```
这段代码假设你使用的是 Spring Boot,并且已经配置好了 JdbcTemplate。如果你使用的是其他的数据库访问库,可以根据具体的库来进行相应的修改。
阅读全文