springboot 读写excel

本文介绍如何利用Apache POI与DOM4J库进行Excel文件的读写操作,包括添加用户数据到Excel表格及从Excel中读取用户信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

添加两个坐标:
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.17</version>
</dependency>

<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>RELEASE</version>
</dependency>

<!-- https://mvnrepository.com/artifact/dom4j/dom4j -->
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>



response.setContentType("application/excel"); List<User> list = userService.selecetAll(); String fileName = "user.xls"; // 设置响应头 response.setHeader("Content-disposition", "attachment;filename=" + fileName + ";filename*=utf-8''" + URLEncoder.encode(fileName, "UTF-8")); // 创建用户表 HSSFWorkbook excel = new HSSFWorkbook(); HSSFSheet sheet = excel.createSheet(); // 声明每0行的索引 int rowNum = 0; // 创建标题 String[] headers = {"用户名", "年龄", "邮箱"}; // 创建第一行 HSSFRow row = sheet.createRow(rowNum); // 将标题放入进去 for (int i = 0; i < headers.length; i++) { // 创建一个单元格 HSSFCell cell = row.createCell(i); // 将数据转换为字符串 HSSFRichTextString text = new HSSFRichTextString(headers[i]); // 将数据放入进去 cell.setCellValue(text); } /** * 将结果返回 */ // 将用户数据放入进去 for (User u : list) { ++rowNum; HSSFRow row1 = sheet.createRow(rowNum); row1.createCell(0).setCellValue(u.getUsername()); row1.createCell(1).setCellValue(u.getAge()); row1.createCell(2).setCellValue(u.getEmail()); } excel.write(response.getOutputStream());

读excel
@RequestMapping("readfile")
public String readFile() {
try {
FileInputStream fileInputStream = new FileInputStream(new File("D:\\work_place.xlsx"));
XSSFWorkbook xssfWorkbook = new XSSFWorkbook(fileInputStream);
if (xssfWorkbook != null) {
// 获取sheet个数
// 获取第一个Sheet 索引为0
XSSFSheet sheet = xssfWorkbook.getSheetAt(0);
// 获取总共有多少行
List<User> list = new ArrayList<>();
for (int i = 0; i < sheet.getLastRowNum(); i++) {
XSSFRow row = sheet.getRow(i);
if (row != null) {
User user = new User();
for (int k = 0; k < row.getLastCellNum(); k++) {
if (row.getCell(0) != null) {
user.setUsername(row.getCell(0).toString());
}

if (row.getCell(1) != null) {
user.setAge(10);
}

if (row.getCell(2) != null) {
user.setEmail(row.getCell(2).toString());
}
}
list.add(user);
} else {
System.out.println("null");
}

}
for (User user : list) {
System.out.println(user);
}
}
return "test";
} catch (IOException e) {
e.printStackTrace();
}
return "test";
}

  

转载于:https://www.cnblogs.com/leigepython/p/10150823.html

### 使用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"字段的数据包;服务器接收到后会尝试从中获取输入流交给后台逻辑完成实际操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值