btxtgxq-system-bigdata/src/main/java/com/cm/bigdata/utils/MergeStrategy.java
2021-01-19 10:12:56 +08:00

46 lines
1.8 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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