java poi合并单元格问题

使用poi导出的execl合并单元格,会出现下图问题

图片描述

整个单元格看似合并了,但是文字没有垂直居中,而且execl中所有的合并都会在第三行开始出现灰色分层样式

合并单元格伪代码

String upCompareField = ""; //上一行的对比值
for(int i = 0; i < size; i++){
    HSSFRow row = sheet.createRow(i);  //sheet为类中全局变量
    for(int j = 0; j < length; j++){
        HSSFCell cell1 = row.createCell(j);
        
        String compareValue = ...; //每行中的对比值
        
        cell1.setCellValue(setValue);
        
        if(upCompareField.equals(compareValue)){
            sheet.addMergedRegion(new CellRangeAddress(i-1,i,j,j));
        }else {
            upCompareField = compareValue;
        }
    }
}

我这里这在因为用了反射获取对象中的值,并与前端传过来的表头做对比,所以使用了双循环,而合并单元格是在双循环中,并且合并需要上一行的值与下一行值相同就合并。

问题:导出的execl中合并的单元格为什么会出现分层问题?还有我这样一层层合并单元格会有问题吗?

阅读 6.7k
2 个回答

从你的截图上看可能是最上面两行进行了单元格合并,然后第三行和上一行的值不同,但是又和第四行和第五行的值相等,进行了一次单元格合并。要不单步调试看看看看第三行合并的时候出了什么问题吧

合并单元格放在双循环外面解决了,双循环中用了Map<String,Map<String,Integer>>保存需要合并的单元格的信息。但是总感觉这样不是最优解。。。。

哪位老铁有poi的导入导出execl代码实现没有

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题