tutorials.de Buch-Aktion 05/2012
Like Tree2Danke
  • 1 Beitrag von javaDeveloper2011
  • 1 Beitrag von javaDeveloper2011
ERLEDIGT
JA
ANTWORTEN
5
ZUGRIFFE
341
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    charusheela charusheela ist offline Mitglied
    Registriert seit
    Jul 2011
    Beiträge
    12
    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 :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
    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 :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    
        /**
         * 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
    Geändert von charusheela (19.08.11 um 07:03 Uhr)
     

  2. #2
    Avatar von javaDeveloper2011
    javaDeveloper2011 javaDeveloper2011 ist offline Mitglied Brokat
    Registriert seit
    Feb 2011
    Beiträge
    445
    Blog-Einträge
    5
    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
    charusheela bedankt sich. 

  3. #3
    charusheela charusheela ist offline Mitglied
    Registriert seit
    Jul 2011
    Beiträge
    12
    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
     

  4. #4
    Avatar von javaDeveloper2011
    javaDeveloper2011 javaDeveloper2011 ist offline Mitglied Brokat
    Registriert seit
    Feb 2011
    Beiträge
    445
    Blog-Einträge
    5
    Hi,

    mit einer Txt-Datei geht sowas auf jeden fall.

    Einlesen:
    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    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:
    Code java:
    1
    
    inhalt.replace("*Blubber*", "blub");
    Speichern:
    Code java:
    1
    2
    3
    
    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ß
    charusheela bedankt sich. 

  5. #5
    charusheela charusheela ist offline Mitglied
    Registriert seit
    Jul 2011
    Beiträge
    12
    bei einer normalen .txt hab ich schon öfters ersetzen etc
    naja ich hab immer wieder zwischen rtf und doc geschwankt
     

  6. #6
    charusheela charusheela ist offline Mitglied
    Registriert seit
    Jul 2011
    Beiträge
    12
    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
    Geändert von charusheela (27.09.11 um 10:11 Uhr)
     

Ähnliche Themen

  1. Word Dokument drucken und Word schließen
    Von InFlame im Forum Visual Basic 6.0
    Antworten: 4
    Letzter Beitrag: 27.07.11, 12:06
  2. Datei Inhalt in *.doc Dokument ersetzen
    Von r00r im Forum Visual Basic 6.0
    Antworten: 2
    Letzter Beitrag: 10.03.09, 16:10
  3. Datei Inhalt in *.doc Dokument ersetzen
    Von r00r im Forum C/C++
    Antworten: 7
    Letzter Beitrag: 10.03.09, 14:51
  4. Excel Dokument Zeilenumbruch ersetzen
    Von tobmir im Forum Office-Anwendungen
    Antworten: 0
    Letzter Beitrag: 13.08.07, 08:48
  5. Word Dokument schützen
    Von vbeldor im Forum Visual Basic 6.0
    Antworten: 2
    Letzter Beitrag: 23.07.07, 16:28