package com.ycl.jxkg.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;
|
|
/**
|
* @author:xp
|
* @date:2024/3/16 11:20
|
*/
|
public class DynamicMergeCellStrategy extends AbstractMergeStrategy {
|
|
/**
|
* 多少行合并一次(起始位置)
|
*/
|
private List<RowItem> rowMergeList;
|
|
/**
|
* 哪些列需要合并行
|
*/
|
private List<Integer> mergeWhichColumn;
|
|
public DynamicMergeCellStrategy(List<RowItem> rowMergeList, List<Integer> mergeWhichColumn) {
|
this.rowMergeList = rowMergeList;
|
this.mergeWhichColumn = mergeWhichColumn;
|
}
|
|
@Override
|
protected void merge(Sheet sheet, Cell cell, Head head, Integer relativeRowIndex) {
|
// 只有单元格的行列在合并范围内才合并
|
if (mergeWhichColumn.contains(cell.getColumnIndex())) {
|
rowMergeList.stream().forEach(rowItem -> {
|
if (rowItem.getStart() <= relativeRowIndex && rowItem.getEnd() >= relativeRowIndex) {
|
CellRangeAddress cellRangeAddress = new CellRangeAddress(rowItem.getStart(), rowItem.getEnd(), cell.getColumnIndex(), cell.getColumnIndex());
|
sheet.addMergedRegionUnsafe(cellRangeAddress);
|
}
|
});
|
}
|
}
|
}
|