Вставка новой строки таблицы с другим номером столбца с помощью Apache poi - PullRequest
0 голосов
/ 04 июня 2018

У меня есть таблица Word с 1 строкой и 2 столбцами, и я хочу вставить новую строку с 3 столбцами, используя Apache poi с Java.Чего я хочу достичь, так это:

picture_1

Но я получаю вот что:

picture_2

Я искал в Интернетедля решения, но все, что я получаю, было о настройке ширины столбца, которая не работает для моего случая.Может ли кто-нибудь помочь мне с этой проблемой?

Это мой код, который я взял из одного из примеров в переполнении стека, чтобы обойти это, чтобы получить вывод, показанный на втором рисунке:

    File file = new File("C:\\Users\\USER\\Desktop\\testdoc.docx");
    XWPFDocument doc = new XWPFDocument(new FileInputStream(file));
    FileOutputStream out = new FileOutputStream(file);

    XWPFTable table = doc.getTableArray(0);
    XWPFTableRow oldRow = table.getRow(0);
    table.insertNewTableRow(1);
    XWPFTableRow newRow = table.getRow(1);

    int indWidth = 0;

    for(int i=0; i < oldRow.getTableCells().size(); i++) {
        int sum = 0;
        BigInteger width = oldRow.getCell(i).getCTTc().getTcPr().getTcW().getW();
        sum += width.intValue();

        indWidth = sum/oldRow.getTableCells().size();
    }

    XWPFTableCell cell;
    for (int i = 0; i < 3; i++) {
        cell = newRow.createCell();

        CTTcPr ctTcPr = cell.getCTTc().addNewTcPr();

        CTTblWidth cellWidth = ctTcPr.addNewTcW();
        cellWidth.setType(oldRow.getCell(0).getCTTc().getTcPr().getTcW().getType());  // sets type of width
        BigInteger width = BigInteger.valueOf(indWidth);
        cellWidth.setW(width);  // sets width

        if (oldRow.getCell(0).getCTTc().getTcPr().getGridSpan() != null) {
            ctTcPr.setGridSpan(oldRow.getCell(0).getCTTc().getTcPr().getGridSpan()); // sets grid span if any
        }

        XWPFRun run = cell.getParagraphs().get(0).createRun();
        run.setText("NewRow C" + i); 
    }

    doc.write(out);
    doc.close();

    System.out.println("Done");

}

1 Ответ

0 голосов
/ 11 июня 2018

Я могу предложить решение для java мира, но не с poi ...

С pxDoc ( www.pxdoc.fr , отказ от ответственности: я один из его авторов...), это может быть достигнуто с помощью следующего кода:

document {
    table {
        row {
            cell { "Column 1" }
            cell { "Column 2" }
        }
        row {
            for (var i = 0; i < 3; i++) {
                cell {
                    "NewRow C" + i
                }
            }
        }
    }
}
...