2017-09-15 1 views
0

Je suis un biginer dans Apache POI et je veux étendre avec une ligne une table existante dans le fichier tamplate mot. Si j'utilise ce code ci-dessous, la table sera étendue avec un bit de ligne. Les cellules de la nouvelle ligne ont créé un style normal.java Apache POI Mot existant table insérer la ligne avec le style de cellule et le formatage

Mon but est les cellules ont le même style de cellules de table etc (police, avec, hauteur ...)

XWPFDocument doc = new XWPFDocument(openFile(fileName)); 
    XWPFTable tbl = doc.getTableArray(tableIndex); 
    XWPFTableRow lastRow = tbl.getRows().get(tbl.getNumberOfRows() - 1); 
    cellCounter = lastRow.getTableICells().size(); 
    XWPFTableRow newRow = tbl.createRow(); 
    for (int i = 0; i < data.size() && cellCounter <= data.size(); i++) {   
    String text = data.get(i); 
     XWPFTableCell cell = newRow.getCell(i); 
     if (cell != null) { 
      cell.setText(text); 
     } 
    } 

Merci pour votre réponse. R.

Répondre

3

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(); 

} 
} 
+0

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

+0

J'ai mis à jour ma réponse depuis que j'ai déjà eu ce problème aussi. –

+0

Ohh je comprends. Merci de votre aide. Ça fonctionne bien. – Zaosz