Apache POI 合并 Word 文档中表格中的单元格 [英] Apache POI merge cells from a table in a Word document

查看:92
本文介绍了Apache POI 合并 Word 文档中表格中的单元格的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要将第一行和第二行的单元格合并的表格.

像这样:

桌子的图片(我不能发图片)

我尝试使用 table.getRow(0).removeCell(1); 删除额外"单元格,但没有成功,我做错了什么吗?

解决方案

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

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

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

|____________|___________|--> |___________ ___________|
|_______|___________|--> |___________ ___________|

//第一行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);//第二行单元格将被合并/删除"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) 垂直合并示例:

//第一行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);//第二行单元格将被合并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);

I need to have a table with the cells on the first and second row merged.

Something like this:

Image of table (I can't post pics) http://i.stack.imgur.com/dAO6j.png

I have been reviewing all the questions related to this topic and I have found some answers for applying grid span to the cells, but I couldn't find a real solution.

Here is the code I have from examples obtained from google and from this site:

    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();

What I get from this code is the following:

I tried to remove the "extra" cells with table.getRow(0).removeCell(1); but it didn't work, am I doing something wrong?

解决方案

To merge horizontally/vertically you need to create 2 CTHMerge and use the setVal:

  • one for the cells that you will remain (STMerge.RESTART);
  • a second one for the merged cells (STMerge.CONTINUE);

a) example of a horizontal merge for a 2x2 table:

|___________|___________| --> |___________ ___________|
|___________|___________| --> |___________ ___________|

// 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) example of a vertical merge:

 // 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);

这篇关于Apache POI 合并 Word 文档中表格中的单元格的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆