|
|
@@ -2,6 +2,7 @@ package cn.tr.module.excel.core.handler.write;
|
|
|
|
|
|
import cn.hutool.core.collection.CollectionUtil;
|
|
|
import cn.hutool.core.util.*;
|
|
|
+import cn.hutool.poi.excel.ExcelUtil;
|
|
|
import cn.tr.module.export.annotation.ExcelCellMerge;
|
|
|
import cn.tr.module.export.annotation.ExcelSelect;
|
|
|
import cn.tr.module.export.annotation.ExcelPropertySupport;
|
|
|
@@ -48,9 +49,9 @@ public class CustomCellWriteHandler implements CellWriteHandler {
|
|
|
public void afterCellDispose(CellWriteHandlerContext context) {
|
|
|
Cell cell = context.getCell();
|
|
|
boolean head = Boolean.TRUE.equals(context.getHead());
|
|
|
+ Field field = context.getExcelContentProperty().getField();
|
|
|
//冻结表头
|
|
|
if(head){
|
|
|
- Field field = context.getExcelContentProperty().getField();
|
|
|
markNotNull(field,cell);
|
|
|
//进行数字校验
|
|
|
createNumColumn(field,cell);
|
|
|
@@ -62,7 +63,7 @@ public class CustomCellWriteHandler implements CellWriteHandler {
|
|
|
}else {
|
|
|
|
|
|
//合并单元格
|
|
|
-
|
|
|
+ mergeCell(field,cell);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -79,10 +80,6 @@ public class CustomCellWriteHandler implements CellWriteHandler {
|
|
|
return;
|
|
|
}
|
|
|
int rowIndex = cell.getRowIndex();
|
|
|
- //不与头部合并
|
|
|
- if(rowIndex==2){
|
|
|
- return;
|
|
|
- }
|
|
|
Row row = sheet.getRow(rowIndex - 1);
|
|
|
Cell rowCell = row.getCell(cell.getColumnIndex());
|
|
|
String lastCellValue = rowCell.getStringCellValue();
|
|
|
@@ -90,8 +87,35 @@ public class CustomCellWriteHandler implements CellWriteHandler {
|
|
|
return;
|
|
|
}
|
|
|
if(StrUtil.equals(lastCellValue,cellValue)){
|
|
|
- //单元格值相同,进行合并操作
|
|
|
- sheet.addMergedRegion(new CellRangeAddress(rowIndex-1,rowIndex,cell.getColumnIndex(),cell.getColumnIndex()));
|
|
|
+ List<CellRangeAddress> mergedRegions = sheet.getMergedRegions();
|
|
|
+ if(CollectionUtil.isNotEmpty(mergedRegions)){
|
|
|
+ //修改原有的合并记录
|
|
|
+ CellRangeAddress exist=null;
|
|
|
+ for (int i = 0; i < CollectionUtil.size(mergedRegions); i++) {
|
|
|
+ CellRangeAddress cellRangeAddress = mergedRegions.get(i);
|
|
|
+ if(ObjectUtil.equals(cellRangeAddress.getFirstColumn(),cell.getColumnIndex())&&ObjectUtil.equals(cellRangeAddress.getLastRow(),rowIndex-1)){
|
|
|
+ exist=cellRangeAddress;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(exist!=null){
|
|
|
+ exist.setLastColumn(cell.getColumnIndex());
|
|
|
+ }else {
|
|
|
+ sheet.addMergedRegion(new CellRangeAddress(rowIndex-1,rowIndex,cell.getColumnIndex(),cell.getColumnIndex()));
|
|
|
+ }
|
|
|
+ }else {
|
|
|
+ //单元格值相同,进行合并操作
|
|
|
+ sheet.addMergedRegion(new CellRangeAddress(rowIndex-1,rowIndex,cell.getColumnIndex(),cell.getColumnIndex()));
|
|
|
+ }
|
|
|
+ //查看原有单元格是否已合并
|
|
|
+ CellRangeAddress oldRange = rowCell.getArrayFormulaRange();
|
|
|
+ if(oldRange==null){
|
|
|
+
|
|
|
+
|
|
|
+ }else {
|
|
|
+ oldRange.setLastRow(rowIndex);
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
|
|
|
}
|