2

我找到了有关如何在使用 docx4j 生成 docx 文件时制作简单表格的教程。并看过一个关于如何垂直合并单元格的示例。有效。但我已经尝试过使用水平合并。但什么也没发生。我该如何使用HMerge?我发现这个类的值可以是"restart""continue"。这些价值观能做什么?这是一个示例代码。

Tbl tblGI = factory.createTbl();
Tr trGI = factory.createTr();

Tc tcGI1 = factory.createTc();
TcPr tcpr = new TcPr();
HMerge hmerge = new HMerge();
hmerge.setVal("restart");
tcpr.setHMerge(hmerge);
tcGI1.setTcPr(tcpr);
tcGI1.getContent().add(wordMLPackage.getMainDocumentPart().createParagraphOfText("sample merged cell"));
trGI.getContent().add(tcGI1);

Tr trGI2 = factory.createTr();
Tc tcGI21 = factory.createTc();
tcGI21.getContent().add(wordMLPackage.getMainDocumentPart().createParagraphOfText("row2 column1"));
trGI2.getContent().add(tcGI21);

Tc tcGI22 = factory.createTc();
tcGI22.getContent().add(wordMLPackage.getMainDocumentPart().createParagraphOfText("row2 column2"));
trGI2.getContent().add(tcGI22);

tblGI.getContent().add(trGI1);
tblGI.getContent().add(trGI2);

此代码显示一个有两行的表格。第一行只有一列和一个单元格(应该合并)。第二行有两个单元格。如何合并第一行并将成为列跨度为 2 的单个单元格。

4

1 回答 1

3

您可以使用 w:gridSpan,如下所示:

<w:tbl>
  <w:tblPr>
    <w:tblStyle w:val="TableGrid"/>
    <w:tblW w:w="0" w:type="auto"/>
    <w:tblLook w:val="04A0" w:firstRow="1" w:lastRow="0" w:firstColumn="1" w:lastColumn="0" w:noHBand="0" w:noVBand="1"/>
  </w:tblPr>
  <w:tblGrid>
    <w:gridCol w:w="4788"/>
    <w:gridCol w:w="4788"/>
  </w:tblGrid>
  <w:tr >
    <w:tc>
      <w:tcPr>
        <w:tcW w:w="9576" w:type="dxa"/>
        <w:gridSpan w:val="2"/>
      </w:tcPr>
      <w:p >
      </w:p>
    </w:tc>
  </w:tr>
  <w:tr >
    <w:tc>
      <w:tcPr>
        <w:tcW w:w="4788" w:type="dxa"/>
      </w:tcPr>
      <w:p />
    </w:tc>
    <w:tc>
      <w:tcPr>
        <w:tcW w:w="4788" w:type="dxa"/>
      </w:tcPr>
      <w:p />
    </w:tc>
  </w:tr>
</w:tbl>

在 TcPr 中,有 get/setGridSpan。

ps 上面的XML是Word 2010生成的,你可以解压一个docx看一下。

于 2013-04-17T07:22:40.927 回答