easyexcel导出多个表
时间: 2025-01-22 19:02:10 浏览: 54
### 使用 EasyExcel 导出多个 Sheet 的方法
为了实现使用 EasyExcel 导出包含多个工作表 (Sheet) 的 Excel 文件,可以按照如下方式编写 Java 代码:
#### 添加 Maven 依赖
确保项目中已引入 `easyexcel` 库作为依赖项。
```xml
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.2.10</version>
</dependency>
```
#### 创建实体类
定义用于映射 Excel 列的数据模型。这里以部门信息为例创建了一个简单的实体类 `Depts`[^1]。
```java
@Data
public class Depts {
/**
* 部门编号
*/
@ColumnWidth(20)
@ExcelProperty(value = "部门编号", index = 0)
private Integer deptno;
/**
* 部门名称
*/
@ColumnWidth(20)
@ExcelProperty(value = "部门名称", index = 1)
private String dname;
}
```
#### 编写导出逻辑
下面是一个完整的例子来展示如何在一个 Excel 文件内添加两个不同的 Sheets 并填充相应的内容:
```java
import com.alibaba.excel.EasyExcel;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public void exportMultiSheets(HttpServletResponse response){
try{
// 设置响应头信息以便浏览器下载文件而不是打开它
response.setContentType("application/vnd.ms-excel");
response.setCharacterEncoding("utf-8");
// 定义要保存的文件名
String fileName = URLEncoder.encode("多Sheet测试.xlsx","UTF-8").replaceAll("\\+", "%20");
// 将文件流返回给客户端
response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName);
// 构建 writer 对象并指定输出流位置以及默认样式配置
EasyExcel.write(response.getOutputStream())
.registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())// 自动调整列宽策略
.inMemory(true)// 是否启用内存模式,默认false, true表示全部加载到内存处理,false则分批读取磁盘临时文件
.build();
List<List<Object>> dataForFirstSheet = new ArrayList<>();
for(int i=0;i<5;i++){
List<Object> row=new ArrayList<>();
row.add(i);
row.add("Department "+i);
dataForFirstSheet.add(row);
}
// 写入第一个 sheet 数据
EasyExcel.write(response.getOutputStream(), Depts.class).sheet("Sheet1")
.doWrite(dataForFirstSheet.stream().map(r -> {
Depts depts = new Depts();
depts.setDeptno((Integer)r.get(0));
depts.setDname(String.valueOf(r.get(1)));
return depts;
}).collect(Collectors.toList()));
List<List<Object>> dataForSecondSheet = new ArrayList<>();
for(int j=0;j<3;j++){
List<Object> row=new ArrayList<>();
row.add(j*10);
row.add("Special Department "+j);
dataForSecondSheet.add(row);
}
// 写入第二个 sheet 数据
EasyExcel.write(response.getOutputStream(), Depts.class).sheet("Sheet2")
.doWrite(dataForSecondSheet.stream().map(r -> {
Depts depts = new Depts();
depts.setDeptno((Integer)r.get(0));
depts.setDname(String.valueOf(r.get(1)));
return depts;
}).collect(Collectors.toList()));
} catch(IOException e){
throw new RuntimeException(e.getMessage());
}
}
```
这段程序会生成一个名为 “多Sheet测试.xlsx” 的 Excel 文档,在其中包含了两张分别命名为 'Sheet1' 和 'Sheet2' 的工作表,并向每张表里填入了一些模拟数据。
阅读全文
相关推荐


















