当前位置: 首页 > 知识库问答 >
问题:

ApachePOI合并Word文档中表中的单元格

尚鸿才
2023-03-14

我需要一个表格,第一行和第二行的单元格合并在一起。

大概是这样的:

桌子的图片(我不能张贴图片)http://i.stack.imgur.com/dAO6j.png

我一直在复习与本主题相关的所有问题,并找到了一些将网格跨度应用于单元的答案,但我找不到真正的解决方案。

以下是我从谷歌和本网站获得的示例代码:

    XWPFDocument document = new XWPFDocument();
    XWPFTable table = document.createTable(7, 2);

    fillTable(table);

    XWPFTableCell cellRow1 = table.getRow(0).getCell(0);
    XWPFTableCell cellRow2 = table.getRow(1).getCell(0);

    cellRow1.getCTTc().addNewTcPr();
    cellRow1.getCTTc().getTcPr().addNewGridSpan();
    cellRow1.getCTTc().getTcPr().getGridSpan().setVal(BigInteger.valueOf(2L));

    cellRow2.getCTTc().addNewTcPr();
    cellRow2.getCTTc().getTcPr().addNewGridSpan();
    cellRow2.getCTTc().getTcPr().getGridSpan().setVal(BigInteger.valueOf(2L));

    FileOutputStream out = new FileOutputStream("Table.docx");
    doc.write(out);
    out.close();

我从这段代码中得到的信息如下:

我试图用table.getRow(0.removeCell(1)删除“额外”单元格 但它不起作用,我做错什么了吗?


共有3个答案

蓝华皓
2023-03-14

您还可以避免创建额外的单元格,而不是在合并后删除单元格。它需要依次添加行和单元格(而不是使用document.createTable()

举个例子,它是:

  1. 用1个单元格创建第一行,设置文本
罗甫
2023-03-14

似乎xml也必须删除:

 XWPFTableCell removed = tableRow.getCell(idx);
 removed.getCTTc().newCursor().removeXml();
 tableRow.removeCell(idx);
欧阳玺
2023-03-14

要水平/垂直合并,您需要创建2个CTHMerge并使用setVal:

  • 一个用于您将保留的单元格(STMerge.RESTART)
  • 第二个用于合并单元格(STMerge.CONTINUE)

a)2x2表的水平合并示例:

|___________|___________| --

// First Row
CTHMerge hMerge = CTHMerge.Factory.newInstance();
vmerge.setVal(STMerge.RESTART);
table.getRow(0).getCell(0).getCTTc().getTcPr().setHMerge(hMerge);
table.getRow(1).getCell(0).getCTTc().getTcPr().setHMerge(hMerge);

// Secound Row cell will be merged/"deleted"
CTHMerge hMerge1 = CTHMerge.Factory.newInstance();
hMerge.setVal(STMerge.CONTINUE);
table.getRow(0).getCell(1).getCTTc().getTcPr().setHMerge(hMerge1);
table.getRow(1).getCell(1).getCTTc().getTcPr().setHMerge(hMerge1);

b) 垂直合并的示例:

 // First Row
CTVMerge vmerge = CTVMerge.Factory.newInstance();
vmerge.setVal(STMerge.RESTART);
table.getRow(0).getCell(0).getCTTc().getTcPr().setVMerge(vmerge);
table.getRow(0).getCell(1).getCTTc().getTcPr().setVMerge(vmerge);

 // Secound Row cell will be merged 
CTVMerge vmerge1 = CTVMerge.Factory.newInstance();
vmerge.setVal(STMerge.CONTINUE);
table.getRow(1).getCell(0).getCTTc().getTcPr().setVMerge(vmerge1);
table.getRow(1).getCell(1).getCTTc().getTcPr().setVMerge(vmerge1);
 类似资料:
  • 我正在尝试创建一个包含多列的word文档。这样做(而不是使用表)的原因是,数据将跨越多个页面,在添加到新页面之前,我只能用列填充整个页面。 可以用ApachePOI实现吗?谢谢

  • 本文向大家介绍C#实现简单合并word文档的方法,包括了C#实现简单合并word文档的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#实现简单合并word文档的方法。分享给大家供大家参考。具体如下: 希望本文所述对大家的C#程序设计有所帮助。

  • 我找不到提取每个单元格中文本的方法

  • 问题内容: 我只有几个Word文件,每个文件都有特定的内容。我想要一个显示给我的片段,或者帮助我弄清楚如何在使用Python库的同时将word文件合并为一个文件。 例如,在pywin32库中,我执行以下操作: 但是我需要在使用Python库而不是 问题答案: 如果您的需求很简单,则可以使用以下方法: 您还可以做其他事情,但这应该可以帮助您入门。 事实证明,在一般情况下,将内容从一个Word文件复制

  • 我正在使用Java和Apache POI创建一个带有表的word文档。 我可以很容易地创建表格,用不同的宽度设置每一列,然后合并单元格以产生所需的效果(见下面的图像)。然而,当我打开word文档时,一些单元格已经被调整,以便它们的边缘对齐。我发现,在表的开头添加一个额外的行并保留所有单元格不合并将保持其余行不变,但稍后使用table.removerow(0)删除该行;影响其余行。如果打开word文

  • 在使用ApachePOI写入word文档时,对于必须根据某个“计数”动态复制段落的位置,这些段落的标题必须按照章节顺序编号。假设它是word文档中的第7节,那么其中每个段落的标题应按顺序编号为7.1、7.2等。 尽管我看到了一些解决方案,其中考虑了word文档的xml,并使用了XWPFN编号。 还有其他更简单的方法吗? 或 如果我的word模板已经有了一个带有编号标题的段落,并且我必须多次复制相同