以下代碼獲取文檔中第一個表中第二行的確切副本。然後它更改此行中單元格的文本內容。然後在此表的第2行和第3行之間插入此複製的行。
的改變必須table.addRow
之前完成,因爲該行必須在List tableRows插入它並將它添加到CTTbl ctTbl的TrArray
之前完成的內容。後來的更改不會寫入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();
}
}
克隆前一行樣式是正確的,但不工作cell.setText(「something」);現在。我不知道爲什麼。我使用這個:XWPFTableCell cell = newRow.getCell(i); – Zaosz
我已經更新了我的答案,因爲我已經得到了這個問題。 –
哦,我明白了。感謝您的幫助。它工作正常。 – Zaosz