easyexcel模版导出多个list
时间: 2025-04-22 13:31:37 浏览: 52
### 使用 EasyExcel 实现多 List 数据导出
为了高效处理大量数据并保持较低的内存占用,EasyExcel 提供了一种基于模板的方式来进行复杂的数据导出操作[^1]。当涉及到多个 `List` 的导出时,可以通过定义特定的写入处理器来完成这一需求。
#### 定义实体类
首先,针对每一个要导出的列表创建对应的 Java 类型对象作为实体表示形式:
```java
public class Order {
private String orderNo;
private Date createTime;
// getter and setter methods...
}
public class Product {
private Long id;
private String name;
// getter and setter methods...
}
```
#### 创建自定义监听器
接着编写一个继承于 `WriteHandler` 接口的类用于控制不同表格之间的切换逻辑以及设置表头样式等个性化配置项:
```java
import com.alibaba.excel.write.handler.WriteHandler;
import org.apache.poi.ss.usermodel.*;
class MultiSheetWriteHandler implements WriteHandler {
@Override
public void sheet(int sheetNo, Sheet sheet) {}
@Override
public void row(int rowNum, Row row) {}
/**
* 自定义单元格样式
*/
@Override
public void cell(Cell cell, Head head, Integer relativeRowIndex, Boolean isHead) {
CellStyle style = cell.getSheet().getWorkbook().createCellStyle();
Font font = cell.getSheet().getWorkbook().createFont();
if (isHead){
// 设置表头字体加粗
font.setBold(true);
style.setFont(font);
// 居中显示
style.setAlignment(HorizontalAlignment.CENTER);
cell.setCellStyle(style);
}
}
}
```
#### 编写业务方法执行导出动作
最后通过调用 EasyExcel API 来指定目标文件路径、加载模板资源并将准备好的数据集传递给它进行实际写出过程:
```java
import com.alibaba.excel.EasyExcel;
import java.util.List;
public static void exportMultiLists(String templatePath, String outputPath,
List<Order> orders, List<Product> products) throws Exception{
try (
FileOutputStream fos = new FileOutputStream(outputPath)) {
EasyExcel.write(outputPath)
.withTemplate(templatePath)
.registerWriteHandler(new MultiSheetWriteHandler())
.sheet()
.doWrite(data -> {
data.add(orders); // 添加订单数据
data.add(products); // 添加商品数据
});
} catch (Exception e) {
throw new RuntimeException(e.getMessage(),e);
}
}
```
上述代码片段展示了如何利用 EasyExcel 库中的 `.withTemplate()` 方法读取预先设计好的 Excel 模板,并借助注册过的 `WriteHandler` 对象来自定义某些行为(比如调整列宽)。随后依次向工作簿内追加两个不同的集合内容——即实现了多 `List` 合并输出至同一文档的功能。
阅读全文
相关推荐


















