Question

Je suis en train d'ouvrir MS document Word 2003 en java, rechercher une chaîne spécifiée et le remplacer par une nouvelle chaîne. J'utilise POI APACHE pour le faire. Mon code est comme le suivant:

public void searchAndReplace(String inputFilename, String outputFilename,
            HashMap<String, String> replacements) {
    File outputFile = null;
    File inputFile = null;
    FileInputStream fileIStream = null;
    FileOutputStream fileOStream = null;
    BufferedInputStream bufIStream = null;
    BufferedOutputStream bufOStream = null;
    POIFSFileSystem fileSystem = null;
    HWPFDocument document = null;
    Range docRange = null;
    Paragraph paragraph = null;
    CharacterRun charRun = null;
    Set<String> keySet = null;
    Iterator<String> keySetIterator = null;
    int numParagraphs = 0;
    int numCharRuns = 0;
    String text = null;
    String key = null;
    String value = null;
        try {
            // Create an instance of the POIFSFileSystem class and
            // attach it to the Word document using an InputStream.
            inputFile = new File(inputFilename);
            fileIStream = new FileInputStream(inputFile);
            bufIStream = new BufferedInputStream(fileIStream);
            fileSystem = new POIFSFileSystem(bufIStream);
            document = new HWPFDocument(fileSystem);
            docRange = document.getRange();
            numParagraphs = docRange.numParagraphs();
            keySet = replacements.keySet();
            for (int i = 0; i < numParagraphs; i++) {
                paragraph = docRange.getParagraph(i);
                text = paragraph.text();
                numCharRuns = paragraph.numCharacterRuns();
                for (int j = 0; j < numCharRuns; j++) {
                    charRun = paragraph.getCharacterRun(j);
                    text = charRun.text();
                    System.out.println("Character Run text: " + text);
                    keySetIterator = keySet.iterator();
                    while (keySetIterator.hasNext()) {
                        key = keySetIterator.next();
                        if (text.contains(key)) {
                            value = replacements.get(key);
                            charRun.replaceText(key, value);
                            docRange = document.getRange();
                            paragraph = docRange.getParagraph(i);
                            charRun = paragraph.getCharacterRun(j);
                            text = charRun.text();
                        }
                    }
                }
            }
            bufIStream.close();
            bufIStream = null;
            outputFile = new File(outputFilename);
            fileOStream = new FileOutputStream(outputFile);
            bufOStream = new BufferedOutputStream(fileOStream);
            document.write(bufOStream);
        } catch (Exception ex) {
            System.out.println("Caught an: " + ex.getClass().getName());
            System.out.println("Message: " + ex.getMessage());
            System.out.println("Stacktrace follows.............");
            ex.printStackTrace(System.out);
        }
}

J'appelle cette fonction avec des arguments suivants:

HashMap<String, String> replacements = new HashMap<String, String>();
replacements.put("AAA", "BBB");
searchAndReplace("C:/Test.doc", "C:/Test1.doc", replacements);

Lorsque le fichier Test.doc contient une simple ligne comme ceci: « AAA EEE », il fonctionne avec succès, mais quand j'utilise un fichier complexe, il va lire le contenu et avec succès générer l'épreuve1. fichier doc, mais lorsque je tente de l'ouvrir, il me donnera l'erreur suivante:

Mot incapable de lire ce document. Il peut être corrompu. Essayez une ou plusieurs des éléments suivants: * Ouvrir et réparer le fichier. * Ouvrez le fichier avec convertisseur de récupération de texte.  (C: \ Test1.doc)

S'il vous plaît dites-moi ce qu'il faut faire, parce que je suis un débutant dans POI et je ne l'ai pas trouvé un bon tutoriel pour cela.

Était-ce utile?

La solution

Vous pouvez essayer OpenOffice API , mais il arent beaucoup de ressources là pour vous dire comment l'utiliser.

Autres conseils

Tout d'abord, vous devriez être fermer votre document.

En outre, ce que je suggère de faire est votre resaving document Word d'origine en tant que document XML Word, puis en changeant l'extension manuellement à partir .XML à .doc. Ensuite, regardez le XML du document réel que vous travaillez avec et tracer le contenu pour vous assurer que vous ne modifiez pas accidentellement des valeurs hexadécimaux (AAA et EEE peuvent être des valeurs hexagonales dans d'autres domaines).

Sans y voir le document Word réel, il est difficile de dire ce qui se passe.

Il n'y a pas beaucoup de documentation sur POI du tout, en particulier pour document Word, malheureusement.

Je ne sais pas: est son OK pour me répondre, mais juste pour partager les connaissances, je vais me répondre

.

Après la navigation sur le Web, la solution finale je l'ai trouvé est: La bibliothèque appelée docx4j est très bon pour traiter le dossier de MS , bien que la documentation ne suffit pas jusqu'à présent et son forum est toujours en commençant pas, mais dans l'ensemble il me aider à faire ce que je dois ..

Merci 4 tous ceux qui me aider ..

Vous pouvez aussi essayer celui-ci: http://www.dancrintea.ro/doc -À-pdf /

On dirait que cette pourrait être la question.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top