SpringBoot項目實現(xiàn)Excel上傳功能的示例代碼
在Spring Boot項目中實現(xiàn)Excel上傳功能,可以通過以下步驟完成。這里使用Apache POI庫處理Excel文件,并結(jié)合Spring MVC的文件上傳功能。
步驟 1:添加依賴
在pom.xml中添加以下依賴:
<!-- Spring Boot Web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Apache POI for Excel -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>5.2.3</version> <!-- 使用最新版本 -->
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.2.3</version>
</dependency>步驟 2:配置文件上傳
在application.properties中添加:
# 文件上傳大小限制 spring.servlet.multipart.max-file-size=10MB spring.servlet.multipart.max-request-size=10MB
步驟 3:創(chuàng)建實體類
假設Excel包含用戶數(shù)據(jù):
public class User {
private String name;
private Integer age;
private String email;
// Getters and Setters
}步驟 4:實現(xiàn)Excel解析工具類
import org.apache.poi.ss.usermodel.*;
import org.springframework.web.multipart.MultipartFile;
import java.util.ArrayList;
import java.util.List;
public class ExcelUtil {
public static List<User> parseExcelFile(MultipartFile file) throws Exception {
List<User> users = new ArrayList<>();
Workbook workbook = WorkbookFactory.create(file.getInputStream());
Sheet sheet = workbook.getSheetAt(0); // 獲取第一個工作表
for (Row row : sheet) {
if (row.getRowNum() == 0) continue; // 跳過表頭
User user = new User();
user.setName(getStringValue(row.getCell(0)));
user.setAge(getIntValue(row.getCell(1)));
user.setEmail(getStringValue(row.getCell(2)));
users.add(user);
}
workbook.close();
return users;
}
private static String getStringValue(Cell cell) {
return cell == null ? "" : cell.getStringCellValue();
}
private static Integer getIntValue(Cell cell) {
return cell == null ? null : (int) cell.getNumericCellValue();
}
}步驟 5:創(chuàng)建Controller
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
@RestController
@RequestMapping("/api/excel")
public class ExcelUploadController {
@PostMapping("/upload")
public ResponseEntity<String> uploadExcel(@RequestParam("file") MultipartFile file) {
if (file.isEmpty()) {
return ResponseEntity.badRequest().body("文件為空");
}
try {
List<User> users = ExcelUtil.parseExcelFile(file);
// 這里處理業(yè)務邏輯(如保存到數(shù)據(jù)庫)
// userService.saveUsers(users);
return ResponseEntity.ok("成功導入 " + users.size() + " 條數(shù)據(jù)");
} catch (Exception e) {
return ResponseEntity.internalServerError().body("導入失敗: " + e.getMessage());
}
}
}步驟 6:前端調(diào)用示例(HTML)
<form action="/api/excel/upload" method="post" enctype="multipart/form-data">
<input type="file" name="file" accept=".xlsx, .xls">
<button type="submit">上傳Excel</button>
</form>高級優(yōu)化建議
異步處理?:
@Async
public void processExcelAsync(MultipartFile file) {
// 耗時操作
}批量插入數(shù)據(jù)庫?:
// 使用JPA批量保存
@Transactional
public void saveUsers(List<User> users) {
userRepository.saveAll(users);
}?驗證Excel格式?:
if (!file.getOriginalFilename().endsWith(".xlsx")) {
throw new IllegalArgumentException("僅支持.xlsx格式");
}?使用監(jiān)聽器模式(大文件處理)??:
考慮使用EasyExcel庫(阿里開源)處理百萬級數(shù)據(jù):
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.3.2</version>
</dependency>處理流程
- 前端提交表單 →
- Controller接收文件 →
- 工具類解析Excel →
- 轉(zhuǎn)換為對象列表 →
- 執(zhí)行業(yè)務邏輯(如存入數(shù)據(jù)庫)
常見問題解決
- ?亂碼問題?:確保Excel保存為UTF-8格式
- ?日期格式?:使用
DateUtil.getJavaDate(cell.getNumericCellValue()) - ?內(nèi)存溢出?:對大文件使用
SXSSFWorkbook或EasyExcel的流式讀取
通過以上實現(xiàn),你可以快速在Spring Boot項目中集成Excel上傳功能,并根據(jù)實際需求擴展數(shù)據(jù)處理邏輯。
到此這篇關于SpringBoot項目實現(xiàn)Excel上傳功能的示例代碼的文章就介紹到這了,更多相關SpringBoot Excel上傳內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Mybatis實現(xiàn)聯(lián)表查詢并且分頁功能
這篇文章主要介紹了Mybatis實現(xiàn)聯(lián)表查詢并且分頁功能,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-03-03
在CentOS系統(tǒng)中檢測Java安裝及運行jar應用的方法
這篇文章主要介紹了在CentOS系統(tǒng)中檢測Java安裝及運行jar應用的方法,同樣適用于Fedora等其他RedHat系的Linux系統(tǒng),需要的朋友可以參考下2015-06-06
Nacos與SpringBoot實現(xiàn)配置管理的開發(fā)實踐
在微服務架構(gòu)中,配置管理是一個核心組件,而Nacos為此提供了一個強大的解決方案,本文主要介紹了Nacos與SpringBoot實現(xiàn)配置管理的開發(fā)實踐,具有一定的參考價值2023-08-08
Spring?BeanPostProcessor后處理器源碼解析
這篇文章主要介紹了Spring?BeanPostProcessor后處理器源碼解析,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧2023-09-09

