mirror of
https://gitee.com/dromara/RuoYi-Vue-Plus.git
synced 2026-09-21 02:25:56 +08:00
excel插件 优化合并策略 在合适的生命周期完成合并 去除被合并单元格的非首行内容
This commit is contained in:
parent
13e60a6048
commit
76a3663f3a
@ -3,6 +3,8 @@ package org.dromara.common.excel.core;
|
|||||||
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.collection.CollUtil;
|
||||||
import com.alibaba.excel.annotation.ExcelProperty;
|
import com.alibaba.excel.annotation.ExcelProperty;
|
||||||
import com.alibaba.excel.metadata.Head;
|
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 com.alibaba.excel.write.merge.AbstractMergeStrategy;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
@ -26,7 +28,7 @@ import java.util.Map;
|
|||||||
* @author Lion Li
|
* @author Lion Li
|
||||||
*/
|
*/
|
||||||
@Slf4j
|
@Slf4j
|
||||||
public class CellMergeStrategy extends AbstractMergeStrategy {
|
public class CellMergeStrategy extends AbstractMergeStrategy implements WorkbookWriteHandler {
|
||||||
|
|
||||||
private final List<CellRangeAddress> cellList;
|
private final List<CellRangeAddress> cellList;
|
||||||
private final boolean hasTitle;
|
private final boolean hasTitle;
|
||||||
@ -41,17 +43,24 @@ public class CellMergeStrategy extends AbstractMergeStrategy {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void merge(Sheet sheet, Cell cell, Head head, Integer relativeRowIndex) {
|
protected void merge(Sheet sheet, Cell cell, Head head, Integer relativeRowIndex) {
|
||||||
// judge the list is not null
|
//单元格写入了,遍历合并区域,如果该Cell在区域内,但非首行,则清空
|
||||||
if (CollUtil.isNotEmpty(cellList)) {
|
final int rowIndex = cell.getRowIndex();
|
||||||
// the judge is necessary
|
for (CellRangeAddress cellAddresses : cellList) {
|
||||||
if (cell.getRowIndex() == rowIndex && cell.getColumnIndex() == 0) {
|
final int firstRow = cellAddresses.getFirstRow();
|
||||||
for (CellRangeAddress item : cellList) {
|
if (cellAddresses.isInRange(cell) && rowIndex != firstRow){
|
||||||
sheet.addMergedRegion(item);
|
cell.setBlank();
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void afterWorkbookDispose(final WorkbookWriteHandlerContext context) {
|
||||||
|
//当前表格写完后,统一写入
|
||||||
|
for (CellRangeAddress item : cellList) {
|
||||||
|
context.getWriteContext().writeSheetHolder().getSheet().addMergedRegion(item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@SneakyThrows
|
@SneakyThrows
|
||||||
private List<CellRangeAddress> handle(List<?> list, boolean hasTitle) {
|
private List<CellRangeAddress> handle(List<?> list, boolean hasTitle) {
|
||||||
List<CellRangeAddress> cellList = new ArrayList<>();
|
List<CellRangeAddress> cellList = new ArrayList<>();
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user