easyexcel动态下载
时间: 2025-05-13 08:46:30 浏览: 8
### 如何使用 EasyExcel 动态生成并下载 Excel 文件
以下是基于提供的引用内容和专业知识,详细介绍如何使用 EasyExcel 实现动态生成并下载 Excel 文件的功能。
#### 添加 Maven 依赖
为了使用 EasyExcel 库,在项目的 `pom.xml` 中需添加以下依赖项[^1]:
```xml
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.0.5</version>
</dependency>
```
#### 定义表头结构
在动态生成 Excel 文件的过程中,首先需要定义表头数据。可以通过创建一个列表来存储每一列的标题信息[^2]:
```java
import com.alibaba.excel.EasyExcel;
import javax.servlet.http.HttpServletResponse;
public class DynamicExportService {
public void exportDynamicExcel(HttpServletResponse response, String fileName, List<List<String>> headers, String tableName) throws IOException {
// 设置响应头信息
response.setContentType("application/vnd.ms-excel");
response.setCharacterEncoding("utf-8");
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
try (OutputStream out = response.getOutputStream()) {
// 调用 EasyExcel 的写入方法
EasyExcel.write(out)
.head(headers) // 设置表头
.sheet() // 创建工作簿
.sheetName(tableName) // 工作簿名称
.doWrite(new ArrayList<>()); // 数据部分为空
}
}
}
```
#### 处理 HTTP 请求
当用户请求下载文件时,可以在 Spring Boot 控制器中处理该逻辑。通过设置 HttpServletResponse 参数,指定返回的内容类型为 Excel 文件,并调用服务层中的导出方法[^3]:
```java
@RestController
@RequestMapping("/export")
public class ExportController {
@Autowired
private DynamicExportService dynamicExportService;
@GetMapping("/dynamic")
public void exportDynamicExcel(HttpServletResponse response) throws IOException {
// 构造动态表头
List<List<String>> headers = new ArrayList<>();
headers.add(Collections.singletonList("姓名"));
headers.add(Collections.singletonList("年龄"));
headers.add(Collections.singletonList("地址"));
// 导出文件名
String fileName = "动态生成.xlsx";
// 表格名称
String tableName = "人员信息";
// 调用服务层方法完成导出
dynamicExportService.exportDynamicExcel(response, fileName, headers, tableName);
}
}
```
#### 并行导出多个文件(可选)
如果需要同时导出多个 Excel 文件并将它们打包成 ZIP 下载,则可以扩展此功能。利用多线程技术分别生成各个 Excel 文件,并最终将其压缩到一个 ZIP 文件中[^3]:
```java
private static final ExecutorService THREAD_POOL = Executors.newFixedThreadPool(10);
public File generateZipOfExcels(List<Map<String, Object>> dataSets, String zipFileName) throws InterruptedException {
List<File> filesToCompress = Collections.synchronizedList(new ArrayList<>());
for (Map<String, Object> dataSet : dataSets) {
THREAD_POOL.submit(() -> {
try {
File tempFile = createTempExcel(dataSet.get("headers"), dataSet.get("tableName").toString());
synchronized (filesToCompress) {
filesToCompress.add(tempFile);
}
} catch (Exception e) {
throw new RuntimeException(e);
}
});
}
THREAD_POOL.shutdown();
THREAD_POOL.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS);
return compressFilesIntoZip(filesToCompress, zipFileName);
}
// 压缩文件至 ZIP 方法省略...
```
---
阅读全文
相关推荐

















