IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

API standards et tierces Java Discussion :

find and replace dans word


Sujet :

API standards et tierces Java

  1. #1
    Membre à l'essai
    Inscrit en
    Octobre 2005
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 24
    Points : 13
    Points
    13
    Par défaut find and replace dans word
    Slt,


    Je dois developper une application qui me permettrait de faire du find and replace dans un document word.

    Alors ce que je fait pour le moment c'est transformer le document word en un document xml puis je charge le xml entier dans une string et je fait du maString = maString.replace(find, replace). J'ai choisi de transformer mon .doc en xml de maniere a pouvoir garder la mise en page.

    C'est le seul moyen que j'ai trouve (je debute )

    Alors ma question c'est de savoir si il y aurait moyen d'attaquer directement le document word.

    J'espère que je me suis bien explique et que vous pourrez m'aider.


    Merci d'avance

  2. #2
    Membre expérimenté
    Avatar de azerr
    Homme Profil pro
    Ingénieur Etude JEE/Eclipse RCP
    Inscrit en
    Avril 2006
    Messages
    942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Etude JEE/Eclipse RCP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 942
    Points : 1 464
    Points
    1 464
    Par défaut
    Bonjour Thargor,
    Si le format RTF peut te convenir, et que tu souhaite designer un document avec word en mettant des champs de fusion (MEGEFIELD) et les remplacer par des valeurs a toi (mecanisme de publipostage), tu peux regarder le projet RTFTemplate qui est un moteur RTF vers RTF qui permet de fusionner des objets JAVA (ton contexte) avec un modele RTF.

    Tu peux trouver RTFTemplate sur http://rtftemplate.sourceforge.net/

    Angelo

  3. #3
    Membre à l'essai
    Inscrit en
    Octobre 2005
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 24
    Points : 13
    Points
    13
    Par défaut
    Slt azerr,

    Tout d'abord merci pour ta réponse, j'y ai jeté un bref coup d'oeil (on est dimanche soir la) mais je dois dire que je n'ai pas tout compris , je débute...
    Ca sera peut etre plus clair après une bonne nuit de sommeil ^^.

    Pour réexpliquer plus simplement, je cherche juste a modifier le texte d'un document word SANS changer la mise en page.

    Voila, j'espère que c'est faisable.

  4. #4
    Membre expérimenté
    Avatar de azerr
    Homme Profil pro
    Ingénieur Etude JEE/Eclipse RCP
    Inscrit en
    Avril 2006
    Messages
    942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Etude JEE/Eclipse RCP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 942
    Points : 1 464
    Points
    1 464
    Par défaut
    Bonjour Thargor,
    quand tu dis "modifier le texte d'un document", ca veux dire quoi? Modifier le code RTF de ton document par un autre code RTF? Si c'est ca que tu veux faire, excuse moi pour mon post, tu ne pourras pas le faire avec RTFTemplate.

    Par contre si tu veux creer un modele RTF avec des "trous" et remplacer ces "trous" avec tes vrais donnees, la tu peux utiliser RTFTemplate. Ca gardera ta mise en forme de ton document et remplacera tes "trous" par tes donnees.

    Ex : tu veux creer un modèle de document d'une fiche client. Tu construit ton modele Word en utilisant des MEGEFIELD (pour tes trous) :

    Ton modele RTF :
    Nom client : $nomClient
    ...

    Ton document RTF final
    Nom client : XXXXXXXXX

    avec $nomClient = XXXXXXXXX

    Pour creer un champs de fusion (MERGEFIELD), tu peux utiliser le menu Word Insertion/Champs puis tu selection ChampsFusion et tu mets un nom.

    J'espere que c'est ca que tu cherches a faire.

    Angelo

  5. #5
    Membre à l'essai
    Inscrit en
    Octobre 2005
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 24
    Points : 13
    Points
    13
    Par défaut
    en fait ce que je dois faire, c'est trouver certains mots et les remplacer par d'autres.

    Par exemple si mon document contient la phrase:

    "Slt, comment vas tu?"

    Le mot "slt" est une abréviation et dans un document officiel ca n'est pas permis, donc je vais chercher dans tout mon document word les "slt" et les remplacer par "salut".

    Voila ce que j'entend par modifier mon texte, je veux juste faire du find and replace sans rien changer d'autre (rien ne doit etre modifier dans la mise en page, que ca soit les couleurs, la police, la taille etc....)

    Donc voila pourquoi je cherche a savoir si il est possible de ne modifier que le texte d'un document word.

    C'est pouca que dans ma methode actuelle je passe d'abord par un fichier xml, car pour faire mon find and replace il suffit que je change le texte/données inclus dans les balises.

    J'espère etre parvenu a bien t'expliquer mon pobleme.

    En tout cas merci de me repondre!

  6. #6
    Membre à l'essai
    Inscrit en
    Octobre 2005
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 24
    Points : 13
    Points
    13
    Par défaut
    up

  7. #7
    Membre expérimenté
    Avatar de azerr
    Homme Profil pro
    Ingénieur Etude JEE/Eclipse RCP
    Inscrit en
    Avril 2006
    Messages
    942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Etude JEE/Eclipse RCP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 942
    Points : 1 464
    Points
    1 464
    Par défaut
    Bonjour Thargor,
    je comprends ce que tu veux faire, en effet RTFtemplate ne fait pas ce que tu attends. Une solution a ton probleme ca serait d'utiliser des expressions regulieres.

    Je me suis inspire des ces exemples http://javaalmanac.com/egs/java.util.../FromFile.html et http://www.ociweb.com/jnb/jnbOct2001.html pour faire un pti exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    package com.xxxx;
     
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.nio.ByteBuffer;
    import java.nio.CharBuffer;
    import java.nio.channels.FileChannel;
    import java.nio.charset.Charset;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
     
    public class TestSearchReplace {
     
    	/**
             * Remplacement de la chaine 'are' par 'is'
             * du fichier "test.text" qui contient la chaine "Java are fun"  
             * @param args
             */
    	public static void main(String[] args) {
    		try {
    			// Chargement du fichier "test.txt" qui contient la chaine
    			// "Java are fun"
    			Pattern pat = Pattern.compile("are");			
    		    Matcher mat = pat.matcher(fromFile("test.txt"));			
    			// Remplace  'are' par 'is'		    
    		    String sentence = mat.replaceAll("is");  // 'Java is fun.'
    		    System.out.println(sentence);
    		}
    		catch (Exception e) {
    			System.out.println(e);
    		}
    	}
     
    	/**
             * Retourne CharSequence du contenu du fichier filename
             * @param filename
             * @return
             * @throws IOException
             */
        public static CharSequence fromFile(String filename) throws IOException {
            FileInputStream fis = new FileInputStream(filename);
            FileChannel fc = fis.getChannel();
     
            // Create a read-only CharBuffer on the file
            ByteBuffer bbuf = fc.map(FileChannel.MapMode.READ_ONLY, 0, (int)fc.size());
            CharBuffer cbuf = Charset.forName("8859_1").newDecoder().decode(bbuf);
            return cbuf;
        }	
     
    }
    Angelo

  8. #8
    Membre à l'essai
    Inscrit en
    Octobre 2005
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 24
    Points : 13
    Points
    13
    Par défaut
    Merci pour ton aide angelo, je vais essayer de m'inspirer de ca

  9. #9
    Membre actif Avatar de gamerome
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    265
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 265
    Points : 211
    Points
    211
    Par défaut
    Je réalise un projet similaire au tien.
    Je dois remplacer des champs d'un document par des données qui sont saisies manuellement. (Ton projet et le mien sont basés sur le meme principe find/replace).
    Malheureusement je doute que tu puisse y arriver avec des documents au format doc. En effet c est le format de micro$oft et il est protégé.
    Si tu essaye d'ouvrir un fichier au format doc dans ton bloc note tu t appercevra que c'est incomprehensible. On arrive tout de meme à retrouver le texte mais c'est difficile de parser le document.

    C'est pour cela qu'il faut s'orienter vers le format RTF. Tu enregistre ton document word au format .rtf puis tu l'ouvre avec java et tu n'as plus qu'à remplacer.

    Bn courage

Discussions similaires

  1. [AC-2007] Piloter un Find/Replace dans Word
    Par Olivier JC dans le forum VBA Access
    Réponses: 4
    Dernier message: 21/09/2009, 11h01
  2. Find\Replace dans word en utilisant vb net
    Par AymenJ dans le forum VBA Word
    Réponses: 4
    Dernier message: 25/03/2008, 16h09
  3. Faire un Find and Replace dans un DataGridView
    Par Contrec dans le forum C#
    Réponses: 5
    Dernier message: 29/08/2007, 09h40
  4. Find and replace sur plusieur fichiers
    Par dazhoid dans le forum MATLAB
    Réponses: 1
    Dernier message: 30/08/2006, 16h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo