Word dokument Text ersetzen

charusheela

Grünschnabel
Hallo
ich muss mit Hilfe eines Programmes Word-Dateien editieren.
Um dies zu bewältigen habe ich mich für Apache POI entschieden.
Das Einfügen von Text am Ende des Dokuments und auch das ersetzen wenn das alte Wort und das neue Wort gleich lang sind klappt.
Wenn sie jedoch unterschiedlich lang sind wird eine Datei erstellt jedoch kann diese Datei nicht geöffnet werden. Es kommt die Fehlermeldung "Die Datei ist zu Umfangreich für Word"
Mit OpenOffice kann ich diese Problemlos öffnen. Nur leide bin ich gezungen das Programm für MS Office zu schreiben.

Hier ist nun der Programmauschnitt aus meinem Tool, der für das ersetztn zuständig ist-
Code:
HWPFDocument doc;
                try {
                    doc = new HWPFDocument(new FileInputStream("C:\\Desktop\\Blubber.doc"));
                
 
                Range range = doc.getRange();
                range.replaceText("*Blubber*", "blub");
                OutputStream out = new FileOutputStream("C:\\Desktop\\Blubber2.doc");
                
                doc.write(out);
                
                out.flush();
                out.close();

Nun folgt der Code von Appache POI welcher aus meinem Tool aus aufgerufen wird
Code:
    /**
     * Replace (one instance of) a piece of text with another...
     *
     * @param pPlaceHolder
     *            The text to be replaced (e.g., "${organization}")
     * @param pValue
     *            The replacement text (e.g., "Apache Software Foundation")
     * @param pOffset
     *            The offset or index where the text to be replaced begins
     *            (relative to/within this <code>Range</code>)
     */
    public void replaceText(String pPlaceHolder, String pValue, int pOffset) {
        int absPlaceHolderIndex = getStartOffset() + pOffset;
        Range subRange = new Range(absPlaceHolderIndex, (absPlaceHolderIndex + pPlaceHolder
                .length()), getDocument());
 
        // this Range isn't a proper parent of the subRange() so we'll have to
        // keep
        // track of an updated endOffset on our own
        int previousEndOffset = subRange.getEndOffset();
 
        subRange.insertBefore(pValue);
 
        if (subRange.getEndOffset() != previousEndOffset) {
            adjustForInsert(subRange.getEndOffset() - previousEndOffset);
        }
 
        // re-create the sub-range so we can delete it
        subRange = new Range((absPlaceHolderIndex + pValue.length()), (absPlaceHolderIndex
                + pPlaceHolder.length() + pValue.length()), getDocument());
 
        // deletes are automagically propagated
        subRange.delete();
    }
 
    /**
     * Replace (all instances of) a piece of text with another...
     *
     * @param pPlaceHolder
     *            The text to be replaced (e.g., "${organization}")
     * @param pValue
     *            The replacement text (e.g., "Apache Software Foundation")
     */
    public void replaceText(String pPlaceHolder, String pValue) {
        boolean keepLooking = true;
        while (keepLooking) {
 
            String text = text();
            int offset = text.indexOf(pPlaceHolder);
            if (offset >= 0)
                replaceText(pPlaceHolder, pValue, offset);
            else
                keepLooking = false;
        }
    }


Findet ihr vlt den Fehler, ich habe schon alles durchforstet aber ich finde keine Lösung.
Vlt habt ihr auch Erfahrung mit anderen Package die für das Berarbeiten für Worddokumenten genutz werden kann.
Bin auch schon am Überlegen ob ich rtf nutze aber da habe ich keine geeigneten libs zum bearbeiten gefunden.

Vielen Dank im Voraus für eure Hilfe
 
Zuletzt bearbeitet:
Hallo charusheela,

ich weiss nicht was du noch alles mit den Dateien vor hast, aber wenn du nur Text anhängen und Suchen + Ersätzen machen willst, lass doch einfach die API weg und bearbeite den Text als String.
Denn letzendlich sind das (doc, rtf, ...) auch nur schliche Textdateien nut halt mit zusätzlichen Auszeichnungen.
Die Gefahr, dass das zu erstzende Schlisselwort nicht als Teil des Textes aber als Auszeichnung vorhanden ist, hält sich im gegensatz zu HTML bei diesen Formaten sehr in Grenzen.

Gruß javaDeveloper2011
 
das hab ich noch gar nicht versucht ich dachte man muss unbedingt die api nutzen.

also muss ich letzendlich die datei nur öffnen, den inhalt dan als String oder was weis ich speichern
und in diesen String die gewünschte "teilstrings" suchen und ersetzen

bist du dir sicher das das klappt währe einfach nur genial wenns so einfach is
danke
 
Hi,

mit einer Txt-Datei geht sowas auf jeden fall.

Einlesen:
Java:
BufferedReader reader = new BufferedReader(new FileReader("dokument.rtf"));
StrngBuilder sb = new StringBuilder();
String line;
String linesep = System.getProperty("line.separator");
while((line = reader.readLine()) != null){
    sb.append(line);
    sb.append(linesep);
}
reader.close();
String inhalt = sb.toString();
Ersätzen:
Java:
inhalt.replace("*Blubber*", "blub");
Speichern:
Java:
BufferedWriter writer = new BufferedWriter(new FileWriter("document.rtf"));
writer.write(inhalt);
writer.close();

Ich würde dir auf jeden Fall zu .rtf (Wikipedia) raten, da es dort noch weniger "Schlüsselwörter giebt", außerdem soll .doc (Wikipedia) irgendwie binär sein.
Wenns dich interessiert, RitchText lässt sich auch - ebenfalls ohne irgend eine API - im JEditorPane anzeigen. (Tutorial)

Gruß
 
nochmals Danke javaDeveloper2011 das du mich auf die Idee gebracht hast das ohne Api zu bewältigen.

Ich habe es mal kurz versucht die .doc zu verarbeiten aber da ich diese dann auch nicht öffnen konnte habe ich es nun mit der Rtf versuch und es klappt alles wunderbar danke
 
Zuletzt bearbeitet:
Zurück