前查了很多文章用poi设置表格合并行列都是用下面的方式
1、合并行
XWPFTableCell.getCTTc().addNewTcPr().addNewVMerge().setVal(STMerge.RESTART)
其中参数STMerge.RESTART表示合并行的开始行,STMerge.CONTINUE表示被合并行,下面有几个STMerge.CONTINUE就合并几行
2、合并列
XWPFTableCell.getCTTc().addNewTcPr().addNewGridSpan().setVal(BigInteger.valueOf(n))
这里n代表和合并列的数字
他们两单独用没问题,但是遇到既然要合并行又要合并列的时候就不行了
如下图这个结构的情况就怎么也实现不了,不管是先设置行合并还是列合并经过不断地尝试发现合并列的时候要将后面被合并列的单元格删除掉就没有问题了,也就是用方法
XWPFTableRow.removeCell(n);n表示单元格在该列第几个格。
但是这样有个问题,就是删除单元格以后原来标准的行列结构就改变了,如我上面图我的第1、2行的单元格就会由四格变成3格,而第3依然是4格。如果先做合并列的动作,就会导致上下两行单元格顺序错位对不上,容易出错算法复杂。那么很简单,由于合并横我们不需要删除单元格,所以就先做合并行的动作,行列结构依然不变,然后再做列的合并。而且在合并了行之后再去合并列既合并行有合并列的情况就已经包含在内,不用再做多余的事情。这里还有一点要注意的就是合并列,从尾部向前去合并最好,这样向前遍历删除的时候,前面单元格的指针位置不变,可以避开一行有多个合并列导致删除单元格不好计算的情况。