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