1、定义合并单元格策略获取方法
/**
* @description: 获取第二个表格的合并策略
* @param secondTablelist
* @return: java.util.List<com.alibaba.excel.write.merge.OnceAbsoluteMergeStrategy>
* @author 30864
* @date: 2024/8/24 20:27
*/
public static List<OnceAbsoluteMergeStrategy> getSecondMergeStrategy(List<ProjectContractExpenditureStatisticDto> secondTablelist) {
int baseRowIndex = 3;
//合并开始行
int startRowIndex = 0;
//合并结束行
int endRowIndex = 0;
//合并开始列
int colStartIndex = 0;
//合并结束列
int colEndIndex = 0;
List<OnceAbsoluteMergeStrategy> strategyList = new ArrayList<>();
// 取出string列的数据
List<String> contractNoList = secondTablelist.stream().map(ProjectContractExpenditureStatisticDto::getContractNo).collect(Collectors.toList());
// 前后添加两个不计入合并的元素 , 类似链表中哨兵,简化索引越界的判断
contractNoList.add(0, "开始节点不计入合并");
contractNoList.add(contractNoList.size(), "结束节点不计入合并");
List<Integer> mergeColIndexList = Arrays.asList(0,1,2,3,4,5,6,13,14,15);
for (int index = 1; index < contractNoList.size() - 1; index++) {
// 当前的元素和数组中前一个元素是否相等
boolean equalsPrevious = Objects.equals(contractNoList.get(index), contractNoList.get(index - 1));
// 当前的元素和数组中后一个元素是否相等
boolean equalsAfter = Objects.equals(contractNoList.get(index), contractNoList.get(index + 1));
// 如果找到一个元素和不等于前面,但是等于后面,则这个元素的索引就是一个OnceAbsoluteMergeStrategy的开始行
if (!equalsPrevious && equalsAf