2

我帮助创建并修改了以下内容,以使用 docx4j 将行项目添加到 Word 文档中的表格中。我现在正在尝试向我指定的表中添加最后一行,并且我正在花时间做这件事。我试图避免报废整个事情并重写它,但它已经接近了。

我可以让它添加一行,在第二个for语句中添加以下内容,其中i正在检查索引,但是它只是复制整个前一行,并且任何插入空白对象的尝试都会导致失败:

lineItemsTables.getContent().add(newTableRow);

还有很多其他的位置我已经尝试放置它来生成一个额外的,但我觉得我错过了一些基本的东西,并且在过去的两天里一直盯着它看,但徒劳无功,我没有看到它。

代码:

public Tbl createLineItemsTable(WordprocessingMLPackage input, Map incomingRequest, String oid) throws JAXBException, SecurityException, IllegalArgumentException, NoSuchMethodException, IllegalAccessException, InvocationTargetException
{
    List<Object> lineItems = getLineItemFromRequest(incomingRequest);
    Tbl lineItemsTables = new Tbl();
    if (lineItems.size() > 0)
    {
        String xpath = "//w:bookmarkStart[@w:name= 'LLINEITEMS']//..//..//..//..";
        List nodes = input.getMainDocumentPart().getJAXBNodesViaXPath(xpath, false);
        Tbl lineTable = (Tbl)XmlUtils.unwrap(nodes.get(0));
        lineItemsTables.setTblGrid(lineTable.getTblGrid());
        lineItemsTables.setTblPr(lineTable.getTblPr());
        Tr tableRows = (Tr)lineTable.getContent().get(1);
        lineItemsTables.getContent().addAll(lineTable.getContent());

        for (int i = 0; i < lineItems.size(); i++)
        {
            Object lineItem = (Object)lineItems.get(i);
            Tr newTableRow = (Tr)XmlUtils.deepCopy(tableRows);
            List tableCells = newTableRow.getContent();
            for (int ix = 0; ix < tableCells.size(); ix++)
            {
                Tc tableCell = (Tc)XmlUtils.unwrap(tableCells.get(ix));
                //Grab first element of these lists.  Table is formatted to only have one item in element list.
                P paragraph = (P)tableCell.getContent().get(0);
                R run = (R)paragraph.getContent().get(0);
                Text text = (Text)XmlUtils.unwrap(run.getContent().get(0));
                text.setValue(findLineItemValue(lineItem,text.getValue(), oid));
            }

            //Replace first row of table, then add all rows after.
            if (i == 0) {
                lineItemsTables.getContent().set(1, newTableRow);
            } else {
                lineItemsTables.getContent().add(newTableRow);
            }
        }
    }

    return lineItemsTables;
}

任何援助将不胜感激。

4

0 回答 0