package com.monkeylessey.excel; import com.alibaba.excel.metadata.Head; import com.alibaba.excel.write.merge.AbstractMergeStrategy; 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; /** * 合并行,每一列合并几行都是统一的 * * EasyExcel.write(response.getOutputStream(), QuestionImportVO.class) * .sheet("模板") * .registerWriteHandler(new SelectExcel(subjectNameList)) * .registerWriteHandler(new FixedMergeCellStrategy(2, 4, Arrays.asList(1, 2, 3, 6, 7, 8, 9))) * .doWrite(data); * * * @author:xp * @date:2024/3/16 11:20 */ public class FixedMergeRowStrategy extends AbstractMergeStrategy { /** * 起始行, 从0开始;列也从0开始 */ private Integer startRow; /** * 合并多少行 */ private Integer mergeRowNumber; /** * 哪些列需要合并行(正常的第几行,不是计算机从0计数) */ private List mergeWhichColumn; public FixedMergeRowStrategy(Integer startRow, Integer mergeRowNumber, List mergeWhichColumn) { this.startRow = startRow; this.mergeRowNumber = mergeRowNumber; this.mergeWhichColumn = mergeWhichColumn; } @Override protected void merge(Sheet sheet, Cell cell, Head head, Integer relativeRowIndex) { for (Integer whichColumn : mergeWhichColumn) { CellRangeAddress cellRangeAddress = new CellRangeAddress(startRow, startRow + mergeRowNumber - 1, whichColumn, whichColumn); sheet.addMergedRegionUnsafe(cellRangeAddress); } } }