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;
|
|
/**
|
* 合并行,每一列合并几行都是统一的
|
* <code>
|
* 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);
|
* </code>
|
*
|
* @author:xp
|
* @date:2024/3/16 11:20
|
*/
|
public class FixedMergeRowStrategy extends AbstractMergeStrategy {
|
|
/**
|
* 起始行, 从0开始;列也从0开始
|
*/
|
private Integer startRow;
|
|
/**
|
* 合并多少行
|
*/
|
private Integer mergeRowNumber;
|
|
/**
|
* 哪些列需要合并行(正常的第几行,不是计算机从0计数)
|
*/
|
private List<Integer> mergeWhichColumn;
|
|
public FixedMergeRowStrategy(Integer startRow, Integer mergeRowNumber, List<Integer> 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);
|
}
|
}
|
}
|