easypoi导出 一对多 list
时间: 2023-06-24 13:06:32 浏览: 143
easypoi导出工具
5星 · 资源好评率100%
在使用 EasyPoi 导出一对多数据时,需要使用 `@ExcelCollection` 注解来标识一对多的关系。下面是一个示例:
假设我们有两个实体类: `Order` 和 `OrderItem`,一个订单可以对应多个订单项。
```java
public class Order {
@Excel(name = "订单编号", orderNum = "0")
private String orderId;
@Excel(name = "订单总价", orderNum = "1")
private BigDecimal totalPrice;
@ExcelCollection(name = "订单项", orderNum = "2")
private List<OrderItem> orderItemList;
// 省略 getter 和 setter 方法
}
public class OrderItem {
@Excel(name = "订单项编号", orderNum = "0")
private String orderItemId;
@Excel(name = "商品名称", orderNum = "1")
private String productName;
@Excel(name = "商品数量", orderNum = "2")
private Integer productQuantity;
// 省略 getter 和 setter 方法
}
```
在 `Order` 类中,我们使用 `@ExcelCollection` 注解标识 `orderItemList` 属性,表示一个订单有多个订单项。在导出时,EasyPoi 会自动处理一对多的数据,并将订单项列表展开成多行数据。
下面是一个导出示例:
```java
// 构造数据
List<Order> orderList = new ArrayList<>();
Order order1 = new Order();
order1.setOrderId("1001");
order1.setTotalPrice(new BigDecimal(100));
List<OrderItem> orderItemList1 = new ArrayList<>();
OrderItem item1 = new OrderItem();
item1.setOrderItemId("101");
item1.setProductName("商品1");
item1.setProductQuantity(2);
orderItemList1.add(item1);
OrderItem item2 = new OrderItem();
item2.setOrderItemId("102");
item2.setProductName("商品2");
item2.setProductQuantity(3);
orderItemList1.add(item2);
order1.setOrderItemList(orderItemList1);
orderList.add(order1);
// 导出
ExcelExportUtil.exportExcel(new ExportParams("订单列表", "订单"), Order.class, orderList, new FileOutputStream("order.xls"));
```
在导出结果中,我们可以看到订单项被展开成了多行数据:
| 订单编号 | 订单总价 | 订单项编号 | 商品名称 | 商品数量 |
| :-----: | :-----: | :-----: | :-----: | :-----: |
| 1001 | 100 | 101 | 商品1 | 2 |
| | | 102 | 商品2 | 3 |
阅读全文