//定义列实体 @Data public class ExcelCoordinate implements Serializable { private int firstRow; private int lastRow; private int firstCol; private int lastCol; public ExcelCoordinate(int firstRow,int lastRow,int firstCol,int lastCol) { this.firstRow=firstRow; this.lastRow=lastRow; this.firstCol=firstCol; this.lastCol=lastCol; } }
设置合并单元格规则容器
public class LoopMergeStrategyQuestion extends AbstractRowWriteHandler { private List<ExcelCoordinate> Coordinates; public LoopMergeStrategyQuestion(List<ExcelCoordinate> Coordinates) { this.Coordinates=Coordinates; } public void afterRowDispose(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Row row, Integer relativeRowIndex, Boolean isHead) { if (!isHead) { for(var Coordinate :Coordinates) { if (relativeRowIndex % Coordinate.getFirstRow() == 0) { CellRangeAddress cellRangeAddress = new CellRangeAddress(Coordinate.getFirstRow(), Coordinate.getLastRow(), Coordinate.getFirstCol(), Coordinate.getLastCol()); writeSheetHolder.getSheet().addMergedRegionUnsafe(cellRangeAddress); } } } } }
使用:
List<ExcelCoordinate> ExcelCoordinates=new ArrayList<ExcelCoordinate>();
ExcelCoordinates.add(new ExcelCoordinate(i,i,j,k));
LoopMergeStrategyQuestion ClassSummaryLoopMergeStrategy=new LoopMergeStrategyQuestion(ExcelCoordinates);
ExcelWriter excelWriter = null;
excelWriter = EasyExcel.write(filePath).build();
writeSheet =EasyExcel.writerSheet(0, "sheet1" ) .head(head) .registerWriteHandler(ClassSummaryLoopMergeStrategy) .build(); excelWriter.write(data, writeSheet);
表头中合并单元格:
将列名称连着写入就可以实现表头中的单元格合并