2010-08-04 5 views
2

J'utilise Apache POI pour générer des fichiers docx à partir d'un modèle. Il ne semble pas y avoir un moyen évident de remplacer tout le texte dans un paragraphe et la documentation est assez rare. En ce moment, je suis capable de lire un document en faisant défiler ses paragraphes, puis en parcourant les passages de chaque paragraphe, puis en faisant défiler le texte de chaque passage ... Cela fonctionne plutôt bien et je peux remplacer le contenu d'un texte, mais mon Les espaces réservés pour les gabarits (exemple: <>) peuvent être divisés en plusieurs passages, ce qui le rend vraiment compliqué à trouver et à remplacer. Est-il possible de définir le contenu d'un XWPFParagraph? Ou au moins un moyen de zapper toutes les courses dans un paragraphe et créer mes propres courses?POI Apache: Remplacer le texte de paragraphe

Voici ce que j'ai jusqu'à présent:

public static void main(String[] args) { 

    InputStream fs = null; 
    try { 
     fs = new FileInputStream("C:\\sample1.docx"); 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } 
    XWPFDocument doc = null; 
    try { 
     doc = new XWPFDocument(fs); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

    for (int i = 0; i < doc.getParagraphs().length; i++) { 
     XWPFParagraph paragraph = doc.getParagraphs()[i]; 
     paragraph.getCTP().getRArray(). 

     // This will output the paragraph's contents. 
     System.out.println(paragraph.getParagraphText()); 

     for (int j = 0; j < paragraph.getCTP().getRArray().length; j++) { 
      CTR run = paragraph.getCTP().getRArray()[j]; 

      for (int k = 0; k < run.getTArray().length; k++) { 
       CTText text = run.getTArray()[k]; 

       // This will output the text contents 
       System.out.println(text.getStringValue()); 

       // And this will set its contents 
       text.setStringValue("Success!"); 
      } 
     } 
    } 

    try { 
     doc.write(new FileOutputStream("C:\\output.docx")); 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

Répondre

5

Je l'ai travailler avec 3,7-beta2. La solution n'est pas idéale et est un peu compliquée, mais cela a fonctionné pour mon cas d'utilisation. Il y a maintenant une méthode XWPFDocument de # de setParagraph qui fera l'affaire ... J'ai quelques exemples d'écriture des documents Word avec POI sur mon blog - tkgospodinov.com:

http://tkgospodinov.com/writing-microsoft-word-documents-in-java-with-apache-poi/

espoir qui aide.

Questions connexes