CellRangeAddress mergedRegion =sheet.getMergedRegion(0);
map.put(mergedRegion.toString(),mergedRegion);
sheet.removeMergedRegion(0);
}
for(String key:map.keySet()){
sheet.addMergedRegion(map.get(key));
}
map.clear();
}
}
解决方法二:
修改源码:
Util类
1、 areRegionsEqual(CellRangeAddress region1, CellRangeAddress region2)方法,
region2改为region1
2、 copyRow(Sheet srcSheet, Sheet destSheet, Row srcRow, Row destRow, String expressionToReplace, String expressionReplacement) 方法
注释掉Set语句,改为形参 , 如下图
3、 copySheets(Sheet newSheet, Sheet sheet,String expressionToReplace, String expressionReplacement)方法
加参数 如下图
XLSTransformer类
transformMultipleSheetsList(InputStreamis, List objects, List newSheetNames, String beanName, Map beanParams,int startSheetNum)方法
添加Set语句,如下图
很显然,产生bug的原因是因为Set集合创建的时机不对,若按照原先copyRow方法内创建Set集合来存储Merge Cell,那么只能存储本行内的合并,而跨行合并的就不能存储了。而areRegionEqual方法出现的却是很低级的错误了,很显然四个属性在比较相等性嘛,就不必多说了!
强烈建议呢,使用方法一比较好,原因有以下几点:
1、 源码本身就比较杂乱,没有必要的注解,胡乱添加更会乱上加乱,
2、 修改源码要涉及到重新编译等,很繁琐
修改源码最好是方法重载,不要修改原有的方法,但这样一来修改幅度有些大了,划不来