2016-04-13 6 views
-1

I für bestimmte Platzhalter suchen möge, und ersetzen Sie es mit Text in Word-Vorlage mit Apache Poi mit JAVA, ich möchte etwas einfach nicht auf allen Tabellen, Zeilen, Zellen in einer Schleife und führt zu Suche nach jedem darin enthaltenen Text.Apache POI - Suche nach Platzhalter in Word-Dokument

+1

Könnten Sie einige Beispieldaten und den Code hinzufügen? PS: Ich denke, es gibt keine einfachere Lösung, als Gedankenzellen zu iterieren. EDIT: gefunden [diese Frage] (http://stackoverflow.com/questions/3618763/find-excel-cell-by-text-in-apache-poi), die Sie – edasssus

+0

für (XWPFTable Tabl helfen könnte: doc. getTables()) { für (XWPFTableRow Reihe: tbl.getRows()) { \t für (XWPFTableCell Zelle: row.getTableCells()) { \t \t für (XWPFParagraph p: cell.getParagraphs()) { \t \t for (XWPFRun r: p.getRuns()) { \t \t String text = r.getText (0); \t \t if (Text! = Null && (text.equalsIgnoreCase ("$ Kommentar"))) { // do something} }}}} –

Antwort

2

Werfen Sie einen Blick auf mein Projekt https://github.com/centic9/poi-mail-merge, die bereits etwas ähnliches tut.

Es ruft im Grunde eine XML-Repräsentation des Word-Dokument, wird der Ersatz und legt das Ergebnis wieder in das Dokument ein.

I.e. etwas wie

CTBody body = doc.getDocument().getBody(); 

    XmlOptions optionsOuter = new XmlOptions(); 
    optionsOuter.setSaveOuter(); 

    // read the current full Body text 
    String srcString = body.xmlText(); 

    ... do the replacements in srcString 

    XmlOptions optionsOuter = new XmlOptions(); 
    optionsOuter.setSaveOuter(); 
    String srcString = src.xmlText(); 
    String prefix = srcString.substring(0,srcString.indexOf(">")+1); 

    final String mainPart; 
    // exclude template itself in first appending 
    if(first) { 
     mainPart = ""; 
    } else { 
     mainPart = srcString.substring(srcString.indexOf(">")+1,srcString.lastIndexOf("<")); 
    } 

    String sufix = srcString.substring(srcString.lastIndexOf("<")); 
    String addPart = append.substring(append.indexOf(">") + 1, append.lastIndexOf("<")); 
    CTBody makeBody = CTBody.Factory.parse(prefix+mainPart+addPart+sufix); 
    src.set(makeBody); 

Beachten Sie, dass die Implementierung verwechselt wird, wenn der Austausch über mehrere Formatierungen, z. Wenn ein Teil des Ersetzungs-Tags fett gedruckt ist, ist dies in der Art und Weise, wie es funktioniert, inhärent.

+0

Vielen Dank für Ihre Antwort, es war hilfreich, aber Sie haben keine Technik zu entfernen spezifische Tabelle (Abschnitt) im Dokument hat $ Platzhalter bekannt. –