java - XWPFTable 的行跨度

标签 java apache-poi xwpf

如何在 Java 的 POI 中使用 XWPFTable 合并 2 行或更多行(行跨度)的单元格?

我知道如何将单元格合并成一行,但我不知道该怎么做,而且我没有找到这方面的任何示例。

提前致谢。

最佳答案

找到了!感谢您对 getCTTc().getTcPr()...this site 的评论,这是一个测试垂直合并

的小程序:
import java.io.FileOutputStream;
import java.io.IOException;

import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFTable;
import org.apache.poi.xwpf.usermodel.XWPFTableCell;
import org.apache.poi.xwpf.usermodel.XWPFTableRow;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STMerge;


public class VerticalMerge {

    public static void main(String[] args) {

        int rows = 5;
        int cols = 5;

        XWPFDocument document = new XWPFDocument();
        XWPFTable table = document.createTable(rows, cols);

        fillTable(table);

        mergeCellsVertically(table, 3, 1, 3);

        try {
            FileOutputStream out = new FileOutputStream("vertical merge.docx");
            document.write(out);
            out.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    private static void fillTable(XWPFTable table) {
        for (int rowIndex = 0; rowIndex < table.getNumberOfRows(); rowIndex++) {
            XWPFTableRow row = table.getRow(rowIndex);

            for (int colIndex = 0; colIndex < row.getTableCells().size(); colIndex++) {
                XWPFTableCell cell = row.getCell(colIndex);
                cell.addParagraph().createRun().setText(" cell " + rowIndex + colIndex + " ");
            }
        }
    }

    private static void mergeCellsVertically(XWPFTable table, int col, int fromRow, int toRow) {

        for (int rowIndex = fromRow; rowIndex <= toRow; rowIndex++) {

            XWPFTableCell cell = table.getRow(rowIndex).getCell(col);

            if ( rowIndex == fromRow ) {
                // The first merged cell is set with RESTART merge value
                cell.getCTTc().addNewTcPr().addNewVMerge().setVal(STMerge.RESTART);
            } else {
                // Cells which join (merge) the first one, are set with CONTINUE
                cell.getCTTc().addNewTcPr().addNewVMerge().setVal(STMerge.CONTINUE);
            }
        }
    }

}

目前,它不会连接合并单元格中的文本,但我有一个想法并将很快更新此答案。祝你好运!

关于java - XWPFTable 的行跨度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24907541/

相关文章:

java - 如何使用 Apache Poi 在折线图中设置轴标签

java - 使用 Apache POI 从 Excel 单元格中提取数据验证

java - 如何使用 POI 在 Excel 工作表中设置打印标题行?

java - Apache POI 中的 CTP、CTTbl 类(对象)是什么?

java - 在 XWPFDocument 中的段落内插入换行符

java - 处理 JavaFX 应用程序的注销按钮操作

java - 第二次用字符串元素数组填充微调器时出错

java - 无法解析 xwpf

java - Eclipse插件: Add new menu into SVN > Team pop-up menu

java - 配置ldap以授权用户