7 changed files with 210 additions and 24 deletions
@ -0,0 +1,26 @@ |
|||||
|
package com.easy.admin.common.enums; |
||||
|
|
||||
|
public enum ProjectStage { |
||||
|
STAGE_1(1, "项目立项阶段"), |
||||
|
STAGE_2(2, "项目采购阶段"), |
||||
|
STAGE_3(3, "项目建设阶段"), // 注意这里应该是"项目建设阶段"而非"项目建设极端"
|
||||
|
STAGE_4(4, "绩效评估阶段"), |
||||
|
STAGE_5(5, "项目验收阶段"); |
||||
|
|
||||
|
private final int stageNumber; |
||||
|
private final String description; |
||||
|
|
||||
|
ProjectStage(int stageNumber, String description) { |
||||
|
this.stageNumber = stageNumber; |
||||
|
this.description = description; |
||||
|
} |
||||
|
|
||||
|
public static String getDescriptionByStageNumber(int stageNumber) { |
||||
|
for (ProjectStage ps : ProjectStage.values()) { |
||||
|
if (ps.stageNumber == stageNumber) { |
||||
|
return ps.description; |
||||
|
} |
||||
|
} |
||||
|
throw new IllegalArgumentException("No matching stage found for number: " + stageNumber); |
||||
|
} |
||||
|
} |
@ -0,0 +1,83 @@ |
|||||
|
package com.easy.admin.modules.huzhou.handler; |
||||
|
|
||||
|
import com.alibaba.excel.metadata.Head; |
||||
|
import com.alibaba.excel.metadata.data.WriteCellData; |
||||
|
import com.alibaba.excel.write.handler.CellWriteHandler; |
||||
|
import com.alibaba.excel.write.metadata.holder.WriteSheetHolder; |
||||
|
import com.alibaba.excel.write.metadata.holder.WriteTableHolder; |
||||
|
import org.apache.poi.ss.usermodel.Cell; |
||||
|
import org.apache.poi.ss.usermodel.CellType; |
||||
|
import org.apache.poi.ss.usermodel.Row; |
||||
|
import org.apache.poi.ss.usermodel.Sheet; |
||||
|
import org.apache.poi.ss.util.CellRangeAddress; |
||||
|
|
||||
|
import java.util.List; |
||||
|
|
||||
|
public class CustomMergeStrategy implements CellWriteHandler { |
||||
|
|
||||
|
/** |
||||
|
* 合并列名。 |
||||
|
*/ |
||||
|
private final List<String> mergeColumnNames; |
||||
|
|
||||
|
/** |
||||
|
* 构造函数。 |
||||
|
* |
||||
|
* @param mergeColumnNames 合并列名。 |
||||
|
*/ |
||||
|
public CustomMergeStrategy(List<String> mergeColumnNames) { |
||||
|
this.mergeColumnNames = mergeColumnNames; |
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
public void afterCellDispose(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, List<WriteCellData<?>> cellDataList, Cell cell, Head head, Integer relativeRowIndex, Boolean isHead) { |
||||
|
// 校验:如果当前是表头,则不处理。
|
||||
|
if (isHead) { |
||||
|
return; |
||||
|
} |
||||
|
|
||||
|
// 校验:如果当前是第一行,则不处理。
|
||||
|
if (relativeRowIndex == 0) { |
||||
|
return; |
||||
|
} |
||||
|
|
||||
|
// 校验:如果当前列名不在合并列名列表中,则不处理。
|
||||
|
if (!this.mergeColumnNames.contains(head.getFieldName())) { |
||||
|
return; |
||||
|
} |
||||
|
|
||||
|
// 获取:当前表格、当前行下标、上一行下标、上一行对象、上一列对象。
|
||||
|
Sheet sheet = cell.getSheet(); |
||||
|
int rowIndexCurrent = cell.getRowIndex(); |
||||
|
int rowIndexPrev = rowIndexCurrent - 1; |
||||
|
Row rowPrev = sheet.getRow(rowIndexPrev); |
||||
|
Cell cellPrev = rowPrev.getCell(cell.getColumnIndex()); |
||||
|
|
||||
|
// 获取:当前单元格值、上一单元格值。
|
||||
|
Object cellValueCurrent = cell.getCellType() == CellType.STRING ? cell.getStringCellValue() : cell.getNumericCellValue(); |
||||
|
Object cellValuePrev = cellPrev.getCellType() == CellType.STRING ? cellPrev.getStringCellValue() : cellPrev.getNumericCellValue(); |
||||
|
|
||||
|
// 校验:如果当前单元格值与上一单元格值不相等,则不处理。
|
||||
|
if (!cellValueCurrent.equals(cellValuePrev)) { |
||||
|
return; |
||||
|
} |
||||
|
|
||||
|
List<CellRangeAddress> mergedRegions = sheet.getMergedRegions(); |
||||
|
boolean merged = false; |
||||
|
for (int i = 0; i < mergedRegions.size(); i++) { |
||||
|
CellRangeAddress cellRangeAddress = mergedRegions.get(i); |
||||
|
if (cellRangeAddress.isInRange(rowIndexPrev, cell.getColumnIndex())) { |
||||
|
sheet.removeMergedRegion(i); // 移除合并单元格。
|
||||
|
cellRangeAddress.setLastRow(rowIndexCurrent); // 设置合并单元格的结束行。
|
||||
|
sheet.addMergedRegion(cellRangeAddress); // 重新添加合并单元格。
|
||||
|
merged = true; |
||||
|
break; |
||||
|
} |
||||
|
} |
||||
|
if (!merged) { |
||||
|
CellRangeAddress cellRangeAddress = new CellRangeAddress(rowIndexPrev, rowIndexCurrent, cell.getColumnIndex(), cell.getColumnIndex()); |
||||
|
sheet.addMergedRegion(cellRangeAddress); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
} |
Loading…
Reference in new issue