# Find and replace Text docx



## nrg (30. Mrz 2012)

Hallo Zusammen,

wie der Name schon sagt. Ich suche eine Library, die das kann. Mit Apache POI habe ich schon paar Sachen gemacht aber hier passt es auf den ersten Blick für mich nicht wirklich. Ich bin grad dabei docx4j zu testen aber wollte parallel schonmal nach Alternativen fragen.
Habt ihr eine Idee für mich?

Danke und Grüße
Andi

[EDIT]
also doc wäre schon auch noch ok. Hier sieht Apache POI wieder ganz brauchbar aus:

```
FileInputStream fis = new FileInputStream("C:/a.doc");
		POIFSFileSystem fs = new POIFSFileSystem(fis);
		HWPFDocument doc = new HWPFDocument(fs);
		Range range = doc.getRange();
		range.replaceText("hallo", "welt");
		FileOutputStream fos = new FileOutputStream("C:/b.doc");
		doc.write(fos);
		fis.close();
		fos.close();
```

sollte eigentlich hallo durch welt ersetzen. erzeugt aber leider eine fehlerhafte datei... (selbst wenn nur einliest und daraufhin b.doc erzeugt, ist er output fehlerhaft)[/EDIT]


----------



## blackdesperate (31. Mrz 2012)

Für sowas bietet sich doch Regex + BufferedReader an, oder nicht ?


----------



## nrg (31. Mrz 2012)

bei einer binärdatei? :autsch:


----------



## maki (31. Mrz 2012)

docx = gezipptes XML

Würde aber trotzdem ein richtige Bibliothek nehmen.


----------



## nrg (31. Mrz 2012)

ah ok. Hast du vllt auch noch Vorschläge welche?


----------



## nrg (2. Apr 2012)

mit poi 3.8 (hatte zuvor 3.7) scheint es mit doc zu funkionieren. Dann mache ich das damit.


----------



## nrg (4. Apr 2012)

POI vergisst leider einige Formatierungen und auch Bilder...

Dann habe ich es mit blackdesperate Vorschlag probiert. Das funktioniert ganz gut, scheitert aber an der Dynamik bei Tabellen und Aufzählungen.

Jetzt bin ich grad bei xdocreport. DocxReporting

Das sieht genau nach dem aus, was ich gesucht habe.

Allerdings habe ich da noch ein Problem:
Sample: odtandvelocity-0.9.6-sample.zip

funktioniert. Allerdings auch leider nur das Sample bzw. genau die im Sample verwendete Ersetzung. Erweitere ich jetzt die Klasse Project um ein Member test mit bean-konformer Getter und meine docx um eine Ersetzungsmarke für test, wird wieder project.name ersetzt. Ich habe das gefühl, dass das irgendeine Demoversion o.ä. ist.

Hat jemand eine Idee, warum die Library nur mit dem Beispiel funktioniert?

[EDIT]edit:
oder ich muss die Ersetzungen erstmal spezifizieren.. nur wie - finde nicht mal javadocs[/EDIT]


----------

