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"); }