| | |
| | | import cn.hutool.core.util.StrUtil; |
| | | import com.alibaba.excel.annotation.ExcelProperty; |
| | | import com.alibaba.excel.metadata.Head; |
| | | import com.alibaba.excel.write.handler.WorkbookWriteHandler; |
| | | import com.alibaba.excel.write.handler.context.WorkbookWriteHandlerContext; |
| | | import com.alibaba.excel.write.merge.AbstractMergeStrategy; |
| | | import lombok.AllArgsConstructor; |
| | | import lombok.Data; |
| | |
| | | * @author Lion Li |
| | | */ |
| | | @Slf4j |
| | | public class CellMergeStrategy extends AbstractMergeStrategy { |
| | | public class CellMergeStrategy extends AbstractMergeStrategy implements WorkbookWriteHandler { |
| | | |
| | | private final List<CellRangeAddress> cellList; |
| | | private final boolean hasTitle; |
| | |
| | | |
| | | @Override |
| | | protected void merge(Sheet sheet, Cell cell, Head head, Integer relativeRowIndex) { |
| | | // judge the list is not null |
| | | if (CollUtil.isNotEmpty(cellList)) { |
| | | // the judge is necessary |
| | | if (cell.getRowIndex() == rowIndex && cell.getColumnIndex() == 0) { |
| | | for (CellRangeAddress item : cellList) { |
| | | sheet.addMergedRegion(item); |
| | | //单元格写入了,遍历合并区域,如果该Cell在区域内,但非首行,则清空 |
| | | final int rowIndex = cell.getRowIndex(); |
| | | if (CollUtil.isNotEmpty(cellList)){ |
| | | for (CellRangeAddress cellAddresses : cellList) { |
| | | final int firstRow = cellAddresses.getFirstRow(); |
| | | if (cellAddresses.isInRange(cell) && rowIndex != firstRow){ |
| | | cell.setBlank(); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public void afterWorkbookDispose(final WorkbookWriteHandlerContext context) { |
| | | //当前表格写完后,统一写入 |
| | | if (CollUtil.isNotEmpty(cellList)){ |
| | | for (CellRangeAddress item : cellList) { |
| | | context.getWriteContext().writeSheetHolder().getSheet().addMergedRegion(item); |
| | | } |
| | | } |
| | | } |
| | |
| | | } |
| | | |
| | | if (!cellValue.equals(val)) { |
| | | if ((i - repeatCell.getCurrent() > 1) && isMerge(list, i, field)) { |
| | | if ((i - repeatCell.getCurrent() > 1)) { |
| | | cellList.add(new CellRangeAddress(repeatCell.getCurrent() + rowIndex, i + rowIndex - 1, colNum, colNum)); |
| | | } |
| | | map.put(field, new RepeatCell(val, i)); |
| | |
| | | if (i > repeatCell.getCurrent() && isMerge(list, i, field)) { |
| | | cellList.add(new CellRangeAddress(repeatCell.getCurrent() + rowIndex, i + rowIndex, colNum, colNum)); |
| | | } |
| | | } else if (!isMerge(list, i, field)) { |
| | | if ((i - repeatCell.getCurrent() > 1)) { |
| | | cellList.add(new CellRangeAddress(repeatCell.getCurrent() + rowIndex, i + rowIndex - 1, colNum, colNum)); |
| | | } |
| | | map.put(field, new RepeatCell(val, i)); |
| | | } |
| | | } |
| | | } |