btxtgxq-system-bigdata/src/main/java/com/cm/bigdata/utils/MergeStrategy.java

46 lines
1.8 KiB
Java
Raw Normal View History

2021-01-19 10:12:56 +08:00
package com.cm.bigdata.utils;
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;
/**
* @author renpc
*/
public class MergeStrategy extends AbstractMergeStrategy {
private final int subjectLength;
private final int nameLength;
private int nextMerge1 = 0;
private int nextMerge2 = 0;
public MergeStrategy(int subjectLength, int nameLength) {
this.subjectLength = subjectLength;
this.nameLength = nameLength;
}
@Override
protected void merge(Sheet sheet, Cell cell, Head head, int relativeRowIndex) {
// 由于每个单元格单元格都会调用该方法,为了避免重复合并异常,只在应合并的行、列执行即可
// relativeRowIndex == 0即表内容的第一行除去表头
if (cell.getColumnIndex() == 0) {
if (relativeRowIndex == 0 || relativeRowIndex == nextMerge1) {
int lastRow = (subjectLength * nameLength) - 1;
nextMerge1 = relativeRowIndex + lastRow;
CellRangeAddress cellRangeAddress = new CellRangeAddress(cell.getRowIndex(), cell.getRowIndex() + lastRow - 1, 0, 0);
sheet.addMergedRegionUnsafe(cellRangeAddress);
}
} else if (cell.getColumnIndex() == 4) {
if (relativeRowIndex == 0 || relativeRowIndex == nextMerge2) {
int lastRow = (subjectLength * nameLength) - 1;
nextMerge2 = relativeRowIndex + lastRow;
CellRangeAddress cellRangeAddress = new CellRangeAddress(cell.getRowIndex(), cell.getRowIndex() + lastRow - 1, 4, 4);
sheet.addMergedRegionUnsafe(cellRangeAddress);
}
}
}
}