Le code suivant obtient une copie exacte de la deuxième ligne de la première table contenue dans le document. Ensuite, il modifie le contenu du texte des cellules de cette ligne. Et insère ensuite cette ligne copiée entre les lignes 2 et 3 de cette table.
La modification du contenu doit être effectué avant table.addRow
depuis la ligne doit être complète avant de l'insérer dans List tableRows et l'ajouter à la TrArray
du CTTbl ctTbl. Les changements ultérieurs ne seront pas écrits dans le XML
. Je n'ai pas vraiment la raison pour laquelle c'est le cas. Puis le code obtient une copie de la dernière ligne et ajoute cette copie à la fin de la table.
Ensuite, le code obtient une copie de la dernière ligne et ajoute cette copie à la fin de la table. Ici aussi le changement du contenu doit être fait avant 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();
}
}
Le style de ligne précédent de clonage est correct, mais ne fonctionne pas cell.setText ("something"); à présent. Je ne sais pas pourquoi. J'utilise ceci: Cellule XWPFTableCell = newRow.getCell (i); – Zaosz
J'ai mis à jour ma réponse depuis que j'ai déjà eu ce problème aussi. –
Ohh je comprends. Merci de votre aide. Ça fonctionne bien. – Zaosz