SpringBoot使用POI详细教程:数据导出

2 下载量 57 浏览量 更新于2024-09-02 收藏 57KB PDF 举报
本文将详细解析如何在SpringBoot项目中使用Apache POI库来实现数据的导出功能。Apache POI是一个广泛使用的Java库,它允许开发者读取、写入和修改Microsoft Office格式的文件,如Excel。我们将涵盖必要的依赖引入、工具类的创建以及实际的数据导出操作。 首先,为了在SpringBoot项目中使用Apache POI,你需要在项目的pom.xml文件中添加以下依赖: ```xml <!--poi核心库--> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.9</version> </dependency> <!--poi处理OOXML(xlsx)文件的库--> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.9</version> </dependency> <!--xmlbeans用于处理特定的XML操作--> <dependency> <groupId>org.apache.xmlbeans</groupId> <artifactId>xmlbeans</artifactId> <version>2.6.0</version> </dependency> <!--dom4j库,提供XML文档对象模型--> <dependency> <groupId>dom4j</groupId> <artifactId>dom4j</artifactId> <version>1.6.1</version> </dependency> ``` 接下来,我们需要创建一个用于处理文件上传和下载的工具类。这个工具类通常会包含处理输入流和输出流的方法,例如: ```java import java.io.*; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class FileUtil { //...其他方法 / * 创建Excel并将其转换为InputStream * @param headers 表头 * @param data 数据列表 * @return Excel文件的InputStream */ public static InputStream createExcelAndConvertToInputStream(List<String> headers, List<Map<String, Object>> data) throws IOException { // 创建Excel工作簿对象 Workbook workbook = new HSSFWorkbook(); // 创建工作表 Sheet sheet = workbook.createSheet("Data"); // 设置表头 Row headerRow = sheet.createRow(0); for (int i = 0; i < headers.size(); i++) { Cell cell = headerRow.createCell(i); cell.setCellValue(headers.get(i)); } // 添加数据 int rowNum = 1; for (Map<String, Object> datum : data) { Row row = sheet.createRow(rowNum++); for (String key : headers) { Cell cell = row.createCell(headers.indexOf(key)); cell.setCellValue(datum.get(key).toString()); } } // 将Workbook写入 ByteArrayOutputStream ByteArrayOutputStream baos = new ByteArrayOutputStream(); workbook.write(baos); // 将ByteArrayOutputStream转换为InputStream return new ByteArrayInputStream(baos.toByteArray()); } //...其他文件操作方法 } ``` 在上述工具类中,`createExcelAndConvertToInputStream`方法用于创建Excel文件并将其转换为InputStream,以便通过HTTP响应返回给客户端。它接收表头和数据列表作为参数,创建一个工作簿,设置表头,然后遍历数据列表填充行。 实际应用时,你可以通过控制器接口调用这个方法,并将其结果设置到HTTP响应中。例如: ```java import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; @RestController @RequestMapping("/export") public class ExportController { @GetMapping("/excel") public ResponseEntity<byte[]> exportExcel() throws IOException { // 获取数据,比如从数据库中查询 List<String> headers = new ArrayList<>(); headers.add("Name"); headers.add("Age"); List<Map<String, Object>> data = new ArrayList<>(); data.add(new HashMap<>()); data.get(0).put("Name", "张三"); data.get(0).put("Age", 30); // 创建Excel并转换为InputStream InputStream excelStream = FileUtil.createExcelAndConvertToInputStream(headers, data); // 设置响应头,指示文件类型和文件名 HttpHeaders headersResponse = new HttpHeaders(); headersResponse.add(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=exported_data.xlsx"); headersResponse.setContentType(MediaType.APPLICATION_OCTET_STREAM); // 创建响应实体 ResponseEntity.BodyBuilder builder = ResponseEntity.ok().headers(headersResponse); return builder.body(IOUtils.toByteArray(excelStream)); } } ``` 在这个示例的`exportExcel`方法中,我们创建了一个简单的Excel文件并将其返回给客户端。客户端接收到响应后,浏览器通常会自动触发下载对话框,允许用户保存Excel文件到本地。 通过这种方式,SpringBoot结合Apache POI库,我们可以轻松地实现在Web应用中导出数据到Excel的功能。需要注意的是,实际项目中可能需要根据具体需求对数据处理、文件命名、错误处理等方面进行更复杂的逻辑处理。