我已经帮助创建,然后修改了以下内容,使用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;
}
任何帮助都将不胜感激。