EASYPOI 一对多动态列导出
时间: 2024-02-11 13:34:55 浏览: 93
您可以使用 EasyPoi 的注解 `@ExcelCollection` 来实现一对多动态列导出。
下面是一个示例代码:
```java
public class ExportVo {
@Excel(name = "订单编号", width = 20)
private String orderNo;
@Excel(name = "订单时间", width = 20)
private Date orderTime;
@ExcelCollection(name = "商品列表")
private List<GoodsVo> goodsList;
// 省略 getter 和 setter 方法
}
public class GoodsVo {
@Excel(name = "商品名称", width = 20)
private String name;
@Excel(name = "商品数量", width = 20)
private Integer quantity;
@Excel(name = "商品单价", width = 20)
private BigDecimal price;
// 省略 getter 和 setter 方法
}
```
在上述代码中,`ExportVo` 类中使用了 `@ExcelCollection` 注解来标记一个属性 `goodsList`,表示这是一个商品列表,需要动态生成列进行导出。`GoodsVo` 类则表示商品信息。
接下来是导出代码:
```java
// 构造数据
ExportVo exportVo = new ExportVo();
exportVo.setOrderNo("202101010001");
exportVo.setOrderTime(new Date());
List<GoodsVo> goodsList = new ArrayList<>();
goodsList.add(new GoodsVo("商品1", 2, new BigDecimal("10.00")));
goodsList.add(new GoodsVo("商品2", 3, new BigDecimal("20.00")));
exportVo.setGoodsList(goodsList);
// 导出excel
List<ExportVo> list = new ArrayList<>();
list.add(exportVo);
ExcelUtil.exportExcel(list, "订单列表", "Sheet1", ExportVo.class, response);
```
在导出代码中,我们将 `ExportVo` 对象添加到列表中,然后调用 `ExcelUtil.exportExcel` 方法进行导出。注意,导出方法的第四个参数要传入 `ExportVo.class`,而不是 `GoodsVo.class`。这是因为 `@ExcelCollection` 注解所标记的属性是 `List<GoodsVo>`,而不是 `GoodsVo`。
运行导出代码即可生成如下的 Excel 文件:
| 订单编号 | 订单时间 | 商品名称1 | 商品数量1 | 商品单价1 | 商品名称2 | 商品数量2 | 商品单价2 |
| :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: |
| 202101010001 | 2021-01-01 00:00:00 | 商品1 | 2 | 10.00 | 商品2 | 3 | 20.00 |
阅读全文