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