以下代码获取文档中第一个表中第二行的精确副本。然后,它更改此行中单元格的文本内容。然后将此复制的行插入到此表的第2行和第3行之间。
不断变化的内容之前必须完成
table.addRow,因为该行必须在插入之前完整列表tableRows并将其添加到
TrArray了的CTTbl
ctTbl。以后的更改将不会写入
XML。我还不知道为什么会这样。
然后,代码获取最后一行的副本,并将此副本添加到表的末尾。在此还必须先更改内容
table.addRow。
import java.io.*;import org.apache.poi.xwpf.usermodel.*;import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTRow;public class WordInsertTableRow { public static void main(String[] args) throws Exception { XWPFdocument doc = new XWPFdocument(new FileInputStream("source.docx")); XWPFTable table = doc.getTableArray(0);//insert new row, which is a copy of row 2, as new row 3: XWPFTableRow oldRow = table.getRow(1); CTRow ctrow = CTRow.Factory.parse(oldRow.getCtRow().newInputStream()); XWPFTableRow newRow = new XWPFTableRow(ctrow, table); int i = 1; for (XWPFTableCell cell : newRow.getTableCells()) { for (XWPFParagraph paragraph : cell.getParagraphs()) { for (XWPFRun run : paragraph.getRuns()) { run.setText("New row 3 cell " + i++, 0); } } } table.addRow(newRow, 2);//insert new last row, which is a copy previous last row: XWPFTableRow lastRow = table.getRows().get(table.getNumberOfRows() - 1); ctrow = CTRow.Factory.parse(lastRow.getCtRow().newInputStream()); newRow = new XWPFTableRow(ctrow, table); i = 1; for (XWPFTableCell cell : newRow.getTableCells()) { for (XWPFParagraph paragraph : cell.getParagraphs()) { for (XWPFRun run : paragraph.getRuns()) { run.setText("New last row cell " + i++, 0); } } } table.addRow(newRow); doc.write(new FileOutputStream("result.docx")); doc.close(); }}


