2019-12-31 17:33:31 版本 : 如何使用NPOI的XWPFTable实现合并行的功能
作者: 陈一奇 于 2019年12月31日 发布在分类 / 人防组 / 人防后端 下,并于 2019年12月31日 编辑
 历史版本

修改日期 修改人 备注
2020-01-02 09:25:05[当前版本] 陈一奇 其他原因...
2019-12-31 17:33:31 陈一奇 创建版本

NPOI word 中的单元格合并。网上有不少教程将单元格合并的,但是基本都是在创建的单元的时候就开始合并了。

现在我们来看下,如何在创建好的表格上再做合并动作。

NPOI 的XWPFTable的row提供了MergeCells这个功能,该功能可以实现单行的已存在的单元格的合并,和set gridspan值不一样的是,它不会创建出新的单元格。

但是XWPFTable没有合并多行的方法,这时候我们需要借助CT_Tc 也就是NPOI中表格单元格的另一种表示形式,这种形式可以让你设置单元格的属性(通过将docx解压开,在docx.xml中可以看到,这里不详说了)。

此时,我们给单元格加上Vmerge的属性就可以了。第一个单元格是restart,后面的是continue。

通过先合并多列,再合并行,我们就能达到合并一个区域的效果。

public static XWPFTableCell MYMergeCells(XWPFTable table, int fromCol, int toCol, int fromRow, int toRow)
        {
            for (int rowIndex = fromRow; rowIndex <= toRow; rowIndex++)
            {
                if (fromCol < toCol)
                {
                    table.GetRow(rowIndex).MergeCells(fromCol, toCol);
                }
                XWPFTableCell rowcell = table.GetRow(rowIndex).GetCell(fromCol);
                CT_Tc cttc = rowcell.GetCTTc();
                if (cttc.tcPr == null)
                {
                    cttc.AddNewTcPr();
                }
                if (rowIndex == fromRow)
                {
                    // The first merged cell is set with RESTART merge value  
                    rowcell.GetCTTc().tcPr.AddNewVMerge().val = ST_Merge.restart;
                }
                else
                {
                    // Cells which join (merge) the first one, are set with CONTINUE  
                    rowcell.GetCTTc().tcPr.AddNewVMerge().val = ST_Merge.@continue;
                }
            }


原文链接: https://blog.csdn.net/weixin_43483847/article/details/87695799
历史版本-目录  [回到顶端]
    知识分享平台 -V 4.8.7 -wcp