在开发中,我们经常会遇到需要将数据导出为 Excel 文件的需求。无论是报表生成、数据备份,还是数据交换,Excel 都是一个非常常见的格式。对于 Java 开发者来说,Apache POI 是一个非常强大的库,可以帮助我们处理 Excel 文件。然而,直接使用 POI 的 API 可能会显得繁琐且容易出错。
幸运的是,SpringBoot 提供了一个非常便捷的方式,只需一个注解,就能轻松实现任意对象的下载功能。本文将详细介绍如何使用 SpringBoot 和 Apache POI 来实现这一功能,并通过一个简单的示例来演示如何将数据导出为 Excel 文件。
1. 引入依赖
首先,我们需要在 pom.xml
文件中引入相关的依赖。除了 SpringBoot 的基本依赖外,我们还需要引入 Apache POI 的依赖。
<dependencies>
<!-- SpringBoot Web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Apache POI -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.2.3</version>
</dependency>
<!-- Lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
2. 创建实体类
假设我们有一个 User
实体类,包含用户的姓名、年龄和邮箱信息。
import lombok.Data;
@Datapublic class User {
private String name;
private int age;
private String email;
}
3. 创建 Excel 导出工具类
接下来,我们创建一个工具类 ExcelUtil
,用于将对象列表导出为 Excel 文件。
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.lang.reflect.Field;
import java.util.List;
public class ExcelUtil {
public static <T> byte[] exportToExcel(List<T> dataList, Class<T> clazz) throws IOException, IllegalAccessException {
Workbook workbook = new XSSFWorkbook();
Sheet sheet = workbook.createSheet("Sheet1");
// 创建表头
Row headerRow = sheet.createRow(0);
Field[] fields = clazz.getDeclaredFields();
for (int i = 0; i < fields.length; i++) {
Cell cell = headerRow.createCell(i);
cell.setCellValue(fields[i].getName());
}
// 填充数据
for (int i = 0; i < dataList.size(); i++) {
Row row = sheet.createRow(i + 1);
T data = dataList.get(i);
for (int j = 0; j < fields.length; j++) {
fields[j].setAccessible(true);
Cell cell = row.createCell(j);
cell.setCellValue(fields[j].get(data).toString());
}
}
// 写入到字节数组
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
workbook.write(outputStream);
workbook.close();
return outputStream.toByteArray();
}
}
4. 创建 Controller
现在,我们创建一个 SpringBoot Controller,用于处理 Excel 导出的请求。
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
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 java.io.IOException;
import java.util.Arrays;
import java.util.List;
@RestController
@RequestMapping("/api")
public class UserController {
@GetMapping("/export")
public ResponseEntity<byte[]> exportUsers() throws IOException, IllegalAccessException {
// 创建示例用户数据
List<User> users = Arrays.asList(
new User("Alice", 25, "alice@qq.com"),
new User("Bob", 30, "bob@qq.com"),
new User("Charlie", 35, "charlie@qq.com")
);
// 导出Excel
byte[] excelBytes = ExcelUtil.exportToExcel(users, User.class);
// 设置响应头
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
headers.setContentDispositionFormData("attachment", "users.xlsx");
// 返回响应
return ResponseEntity.ok()
.headers(headers)
.body(excelBytes);
}
}
5. 运行并测试
启动 SpringBoot 应用后,访问 http://localhost:8080/api/export
,浏览器会自动下载一个名为 users.xlsx
的 Excel 文件。打开该文件,你会看到如下内容:
|
|
|
---|---|---|
|
|
|
|
|
|
|
|
|
6. 总结
通过以上步骤,我们实现了一个简单的 SpringBoot 应用,能够将任意对象列表导出为 Excel 文件。借助 Apache POI 和 SpringBoot 的强大功能,我们只需几行代码就能完成这一任务。这种方式不仅简化了开发流程,还提高了代码的可维护性。
如果你有更复杂的需求,比如自定义表头、样式设置等,可以进一步扩展 ExcelUtil
工具类。希望本文对你有所帮助,欢迎在评论区分享你的想法和经验!
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容