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

Documents Java Discussion :

modification de document docx avec API Apache POI ou autres.


Sujet :

Documents Java

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Janvier 2010
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 1
    Points : 1
    Points
    1
    Par défaut modification de document docx avec API Apache POI ou autres.
    Bonjour,

    Je suis actuellement stagiaire en développement informatique. Mon projet de stage consiste en la création d’une application générant des documents MS Office Word 2007 (Office Open XML) en langage Groovy ou JAVA. Je réussi à remplacer les images correspondant au graphique, mais je ne parviens pas à substituer une clé du type $$$texteAsubstituer par une chaine de caractères. Ce que je parviens à faire de mieux est une concaténation à la suite de la clé.

    Je parviens effectivement sans problème à parcourir chaque Paragraph du Document (xwpfDoc.getParagraphs(i)), par contre à l'étape suivante je ne parviens pas à parcourir les Run (je ne trouve pas de méthode du genre paragraph.getRuns()) . Ceci pose un problème pour substituer le mot clé par le texte de remplacement au bon endroit, car je ne parviens pas à utiliser le Run spécifique contenant le mot clé. Actuellement pour ajouter du texte au Paragraph, je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ...
    HWPFRun unRun = paragraph.createRun();
    unRun.setText(texteDeRemplacement);
    ...
    Ceci ajoute le texte de remplacement dans un nouveau Run, à la suite des Run existant, dans le paragraphe contenant le mot clé. Pour que le mot clé n'apparaisse pas sur le document final, je l'ai placé en fin de Paragraph en police 1 et en couleur invisible. Cette méthode est très loin d'être élégante et pose des problèmes lors de la modification du document type par les utilisateurs finaux. Je ne trouve pas non plus de méthode de substitution de texte pour effectuer l'étape suivante.

    Je ne trouve pas de méthode dans les API Apache POI (XWPF) permettant d'explorer les Run individuellement, par contre je trouve cette méthode dans les API Apache POI (HWPF) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    ...
    int numCharRuns = paragraph.numCharacterRuns();
    for (int j = 0; j < numCharRuns; j++) {
                CharacterRun charRun = paragraph.getCharacterRun(j);
      text = charRun.text();
      if (text.contains(key)) {
        int start = text.indexOf(key);
        charRun.replaceText(key, value, start);
      }
    }
     ...
    Comment puis-je explorer et agir individuellement sur chaque Run d'un fichier docx, à l'aide des API Apache POI ou d'une autre librairie?

    Je vous serrai très reconnaissant si vous pouviez me donner une piste ou un exemple me permettant d'atteindre mon but...

    Par avance merci pour toute aide ou proposition.

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    11
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Novembre 2003
    Messages : 11
    Points : 11
    Points
    11
    Par défaut
    Est ce que tu as trouvé comment faire ?
    Cette méthode de fonctionnement m'intéresse beaucoup !

  3. #3
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2009
    Messages : 7
    Points : 10
    Points
    10
    Par défaut
    Bonjour,
    je ne vais pas apporter de réponse mais poser une question supplémentaire, désolé

    J'essaie de ré-écrire un programme écrit en .NET utilisant l'api ExcelADO en Java avec POI. Le programme en .NET permettait de modifier le fichier Excel pendant qu'il était exécuté par Excel, l'utilisateur voyant en temps réel les modifications.
    Comment puis-je faire la même chose en Java ? La méthode de modification de POI est un cycle lecture/écriture en utilisant le FileOutputStream qui ne peut pas écrire si le fichier est en cours d'utilisation (IOException: file already in use). Donc je bloque ...

    Quelqu'un aurait-il une piste à me soumettre ?

    Merci !

  4. #4
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2009
    Messages : 7
    Points : 10
    Points
    10
    Par défaut
    Plop,

    je viens d'essayer en accédant comme à une base de données à mon fichier Excel avec Jdbc et le résultat est le même : rien à faire quand le fichier est déjà ouvert par Excel ...

Discussions similaires

  1. Réponses: 0
    Dernier message: 01/08/2014, 10h00
  2. Modification des documents PDF avec iText
    Par bittar dans le forum Débuter avec Java
    Réponses: 10
    Dernier message: 19/07/2013, 01h34
  3. [ODS] Créer un document .docx avec SAS 9.2
    Par papilluce dans le forum ODS et reporting
    Réponses: 6
    Dernier message: 02/02/2012, 18h14
  4. Problème avec org.apache.poi.POIDataSamples
    Par amine1980 dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 14/12/2011, 18h03

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