springboot 读取excel
时间: 2025-01-22 10:47:39 浏览: 43
### 使用Spring Boot读取Excel文件
为了在Spring Boot应用程序中实现读取Excel文件的功能,可以采用多种方法和库来简化这一过程。Apache POI是一个广泛使用的Java库,能够处理Microsoft Office文档,包括Excel文件[^1]。
#### 添加依赖项
首先,在`build.gradle`或`pom.xml`文件中加入必要的依赖关系。对于Gradle项目而言:
```gradle
dependencies {
implementation 'org.apache.poi:poi-ooxml:5.2.3'
}
```
如果使用Maven,则应添加如下配置到`pom.xml`:
```xml
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.2.3</version>
</dependency>
```
#### 编写服务类以解析Excel数据
创建一个新的服务组件用于加载并解析上传的Excel文件内容。下面给出了一种可能的服务层实现方式:
```java
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.InputStream;
@Service
public class ExcelService {
public List<String[]> readExcel(InputStream inputStream) throws IOException {
try (Workbook workbook = new XSSFWorkbook(inputStream)) {
Sheet sheet = workbook.getSheetAt(0);
Iterator<Row> rowIterator = sheet.iterator();
List<String[]> dataRows = new ArrayList<>();
while(rowIterator.hasNext()) {
Row currentRow = rowIterator.next();
Iterator<Cell> cellIterator = currentRow.cellIterator();
String[] rowData = new String[currentRow.getLastCellNum()];
int columnIndex = 0;
while(cellIterator.hasNext()){
Cell currentCell = cellIterator.next();
switch(currentCell.getCellType()){
case STRING:
rowData[columnIndex++] = currentCell.getStringCellValue();
break;
case NUMERIC:
rowData[columnIndex++] = String.valueOf(currentCell.getNumericCellValue());
break;
default:
rowData[columnIndex++] = "";
}
}
dataRows.add(rowData);
}
return dataRows;
}
}
}
```
此代码片段展示了如何通过Apache POI API打开XLSX格式的工作簿,并逐行遍历工作表中的单元格,提取字符串或数值类型的值作为数组返回给调用者。
#### 控制器端点定义
最后一步是在控制器里暴露HTTP接口供客户端提交Excel文件。这里提供了一个简单的例子说明怎样接收multipart/form-data请求体内的文件对象,并将其传递给上述提到的服务实例进行处理:
```java
@RestController
@RequestMapping("/api/excel")
public class ExcelController {
@Autowired
private ExcelService excelService;
@PostMapping("/upload")
public ResponseEntity<List<String[]>> uploadFile(@RequestParam("file") MultipartFile file){
try{
InputStream is = file.getInputStream();
List<String[]> result = this.excelService.readExcel(is);
return ResponseEntity.ok(result);
}catch(Exception e){
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(null);
}
}
}
```
这段程序允许用户通过POST请求向指定URL发送带有名称为"file"字段的数据包;服务器接收到后会尝试从中获取输入流交给后台逻辑完成实际操作。
阅读全文
相关推荐


















