easyexcel 合并单元格

利用导出策略实现

import com.alibaba.excel.metadata.Head;
import com.alibaba.excel.write.merge.AbstractMergeStrategy;
import com.jpush.pojo.OrderItem;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.util.CellRangeAddress;

import java.util.List;
import java.util.Map;

public class MyAbsoluteMergeStrategy extends AbstractMergeStrategy {

    Map<String,List<OrderItem>> orderMap;
    private int row = 1;

    public MyAbsoluteMergeStrategy(Map<String,List<OrderItem>> orderMap) {
        this.orderMap = orderMap;
    }



    @Override
    protected void merge(Sheet sheet, Cell cell, Head head, Integer relativeRowIndex) {
        if (row == 1 ) {
            for (Map.Entry<String, List<OrderItem>> entry : orderMap.entrySet()) {
                List<OrderItem> itemList = entry.getValue();
                CellRangeAddress cellRangeAddress =
                        new CellRangeAddress(row, row + itemList.size() - 1, 0, 0);

                sheet.addMergedRegionUnsafe(cellRangeAddress);
                row += itemList.size();
            }
        }
    }


}

 

测试代码

  private static void merge() {
        // 方法1 注解
        String fileName = "D:\\mergeWrite.xlsx";

        Map<String,List<OrderItem>> orderMap = new HashMap<>();
        List<OrderItem> list = new ArrayList<>();
        for (int i = 0; i < 3; i++) {
            OrderItem item = new OrderItem();
            item.setOrderNo("abc");
            item.setUser("xiaosu" + i);
            list.add(item);
        }
        orderMap.put("one",list);


        List<OrderItem> ls = new ArrayList<>();
        for (int i = 0; i < 2; i++) {
            OrderItem item = new OrderItem();
            item.setOrderNo("oeir");
            item.setUser("xiaoai" + i);
            ls.add(item);
        }

        orderMap.put("two",ls);

        List<OrderItem> datas = new ArrayList<>(list);
        datas.addAll(ls);

        MyAbsoluteMergeStrategy mergeStrategy = new MyAbsoluteMergeStrategy(orderMap);
//        EasyExcel.write(fileName, OrderItem.class).sheet("模板").doWrite(list);
        EasyExcel.write(fileName, OrderItem.class).registerWriteHandler(mergeStrategy).sheet("模板").doWrite(datas);
        System.out.println("suc");
    }

 

posted @ 2022-07-06 15:57  冬马党  阅读(1437)  评论(0)    收藏  举报