需求,解析前端传入的excep用MultipartFile接收 1.后端使用java解析file并映射为对象 2.请使用poi来转换文件 3.excep的第一行为key,后续行为value,结果为list<map>
时间: 2024-09-23 19:03:45 浏览: 44
解决出现 java.lang.ExceptionInInitializerError错误问题
在Java后端处理前端通过`MultipartFile`上传的Excel文件,并按照您描述的需求解析每一行作为Map存储在List中,我们可以使用Apache POI库来读取Excel内容。以下是大致步骤:
1. 首先,我们需要导入必要的依赖:
```java
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.Map;
```
2. 创建一个解析函数,假设文件已经成功上传:
```java
private List<Map<String, String>> parseExcel(MultipartFile excelFile) throws IOException {
List<Map<String, String>> data = new ArrayList<>();
try (InputStream inputStream = excelFile.getInputStream()) {
Workbook workbook = new XSSFWorkbook(inputStream);
Sheet sheet = workbook.getSheetAt(0); // 假定只有一个工作表
if (sheet != null) {
for (Row row : sheet) {
Map<String, String> rowData = new HashMap<>();
for (int i = 0; i < row.getLastCellNum(); i++) {
Cell cell = row.getCell(i);
if (cell != null) {
String value = "";
switch (cell.getCellType()) {
case STRING:
value = cell.getStringCellValue();
break;
case NUMERIC:
// 如果需要数字转换成字符串,可以添加对应逻辑
break;
default:
// 对于其他类型,可以忽略或转换为字符串
}
rowData.put(sheet.getRow(rowIndex).getCell(i).toString(), value); // 使用rowIndex获取实际行数
}
}
if (!rowData.isEmpty()) {
data.add(rowData);
}
}
}
} finally {
workbook.close();
}
return data;
}
```
3. 当接收到前端传来的`MultipartFile`时,调用上述函数并处理结果:
```java
@PostMapping("/parse-excel")
public ResponseEntity<List<Map<String, String>>> parseExcel(@RequestParam MultipartFile excelFile) {
try {
List<Map<String, String>> result = parseExcel(excelFile);
// 返回结果
// ...
} catch (IOException e) {
// 处理错误
// ...
}
}
```
阅读全文