DOCX4J:向表中添加最后一行

时间:2013-05-31 16:01:05

标签: java docx4j

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

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

lineItemsTables.getContent().add(newTableRow);

还有很多其他的地方我试过这个以产生一个额外的,但我觉得我错过了一些基本的东西,并在过去2天盯着这个并试图徒劳无功我没有看到它

代码:

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;
}

任何帮助都将不胜感激。

0 个答案:

没有答案