Excel导出合并单元格导致数据丢失
场景:
Excel导出,涉及到单元格的合并。 在处理完每一行的数据后,需要对同一个id的单元行进行合并,却发现,合并后出现数据丢失。 本该有31条数据,但是到处的excel加上合并的行,只有31行(excel的行标)。 一定是合并的时候出现了问题
方案
经过debug排查,发现是如下代码合并问题
if(treeValueListSize > 1){
for(int n = 0; n < firstTitleNodeIndex; n++){
CellRangeAddress region = new CellRangeAddress(dataRow, dataRow + treeValueListSize-1, n, n);
sheet.addMergedRegion(region);
}
for(int n = lastTitleNodeIndex + 1; n < title.length; n++){
CellRangeAddress region = new CellRangeAddress(dataRow, dataRow + treeValueListSize-1, n, n);
sheet.addMergedRegion(region);
}
dataRow += treeValueListSize;
}
这里涉及到 sheet.addMergedRegion(region)
这个方法,方法如下
sheet.addMergedRegion(new CellRangeAddress(int firstRow, int lastRow, int firstCol, int lastCol)
代码从这里走过后, sheet里面的rows出现混乱。 初步猜测是这里的问题。
那怎么办呢?
猜想: 是在处理每一组数据的同时,进行excel行合并,导致出现问题。
方案
-
重写合并方法,将所有excel行都先生成后,然后进行统一标记合并。 对每一组数据,记录要合并的 行号和列号。 修改。 成功!
-
仔细研究之前的代码,网上搜,边处理数据,边合并单元格。 也搜不到。 合并的单元格 为 region, 却在debug的里面找不到。。。。 放弃