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 :

JAVA POI + Word


Sujet :

Documents Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 116
    Points : 67
    Points
    67
    Par défaut JAVA POI + Word
    Bonjour à tous,
    je tourne en rond depuis 2 jours sur un problème.

    J'ai un document .dotm (document modèle).
    En java, j'aimerais lire le fichier et recopier son contenu dans un fichier .docx. Or, lorsque j'essaie d'ouvrir le document .docx en faisant un double clic sur le nouveau fichier généré, j'ai le message d'erreur suivant :
    Désolé...Nous ne pouvons pas ouvrir New_Doc_modele.docx, car nous avons découvert un problème avec son contenu
    Voici le code que j'écris pour faire la recopie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    File fileOrig = new File("C:\\temp\\test_macro\\Doc_modele.dotm");
    InputStream is = new FileInputStream(fileOrig);
    //+ Ouverture du fichier modèle Word
    OPCPackage opcPackage = OPCPackage.open(is);
    opcPackage.save(new File("C:\\temp\\test_macro\\New_Doc_modele.docx"));
    opcPackage.close();
     
    is.close();
    Est-ce que quelqu'un aurait une idée, car je ne suis peut-être pas sur la bonne piste ! Peut-être qu'il faut créer un fichier .docx en se basant sur le template, mais comment fait-on en passant par POI ?

    D'avance merci.
    Franck.

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 116
    Points : 67
    Points
    67
    Par défaut
    Je viens d'essayer en utilisant un autre code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    XWPFDocument doc = new XWPFDocument(new FileInputStream("C:\\temp\\test_macro\\Doc_modele.dotm"));	
    FileOutputStream out = new FileOutputStream("C:\\temp\\test_macro\\New_Doc_modele.docx");
    doc.write(out);
    out.close();
    mais résultat identique
    Désolé...Nous ne pouvons pas ouvrir New_Doc_modele.docx, car nous avons découvert un problème avec son contenu
    PS: En passant par l'explorateur Windows, si je renomme ou si je fais un copier/coller du fichier .dotm en .docx, j'obtiens le même résultat
    Désolé...Nous ne pouvons pas ouvrir New_Doc_modele.docx, car nous avons découvert un problème avec son contenu
    Je pense que je ne suis pas sur la bonne voie...

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 116
    Points : 67
    Points
    67
    Par défaut
    Et pour info, lorsqu'on effectue le même code (le premier), mais en se basant sur un docx, ça fonctionne...donc j'ai l'impression que le problème est dû au fait que le fichier d'origine soit un document modèle...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    File fileOrig = new File("C:\\temp\\test_macro\\Document1.docx");
    InputStream is = new FileInputStream(fileOrig);
    //+ Ouverture du fichier modèle Word
    OPCPackage opcPackage = OPCPackage.open(is);
     
    opcPackage.save(new File("C:\\temp\\test_macro\\Document2.docx"));
    opcPackage.close();
     
    is.close();
    Ne serait-il pas possible de créer un document .docx en se basant sur le modèle avec POI ?

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Je pense que le souci vient du non support des macros par Apache POI. Le format docm est un format avec macro. Le format dotx est le format pour les modèles de docx sans macro.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 116
    Points : 67
    Points
    67
    Par défaut
    Bonjour et merci pour ta réponse.

    Je viens de faire un nouveau test en créant un nouveau fichier .dotm à partir du fichier orginal .dotm => Dans ce cas-là, le nouveau fichier dotm s'ouvre bien...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    File file = new File("C:\\temp\\test_macro\\Doc_modele.dotm");
    FileInputStream fis = new FileInputStream(file.getAbsolutePath());
    XWPFDocument document = new XWPFDocument(fis);
     
    XWPFDocument doc = new XWPFDocument(document.getPackage());
    FileOutputStream out = new FileOutputStream("C:\\temp\\test_macro\\New_Doc_modele.dotm");
    doc.write(out);
     
    out.close();
    fis.close();
    En fait, j'ai l'impression qu'en reprenant TOUT le contenu du package du .dotm, et en créant un fichier .docx, dans la structure du nouveau .docx, il doit rester des éléments indiquant qu'il s'agit d'un fichier de "type" modèle, et non pas, un fichier"simple".

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 116
    Points : 67
    Points
    67
    Par défaut
    Je n'ai pas trouvé de solution, et je ne pense pas qu'avec POI, je puisse faire ce que je veux.
    Je passe tout de même le post à RéSOLU, car j'ai réussi à m'expliquer mon problème d'origine qui m'a amené à vouloir faire cette copie de fichiers...

    Pour info, mon problème d'origine était que le fichier .dotm ouvert n'était pas le fichier .dotm, mais un document appelé Document1 (normal, puisqu'on ne peut pas modifier le fichier modèle, Word en ouvre une "copie"). Or dans mon cas, je passe par un navigateur et suivant le navigateur, le fonctionnement n'est pas le même :
    - Sous IE, le navigateur affiche une boite de dialogue proposant à l'utilisateur de choisir ce qu'il veut faire. S'il ouvre le document, alors, c'est bien le fichier .dotm qui s'ouvre.
    - Sous Chrome, le navigateur enregistre directement le fichier dans le répertoire Téléchargements, sans afficher la boite de dialogue. Dans ce cas-là, en allant dans le répertoire Téléchargements, l'utilisateur peut "ouvrir" le document via le menu contextuel du fichier. En choisissant "ouvrir", c'est le bien le document .dotm qui s'ouvre. En choisissant "Nouveau", Word ouvre la copie (Document1).
    - Sous FireFox, le navigateur fait un mixte des 2 ! Affichage boit de dialogue et si l'utilisateur décide d'ouvrir le document, ce n'est pas le document .dotm qui s'ouvre, mais la copie (Document1)

    Dans mon cas, je devais à tout prix avoir le document .dotm, et pas le document Document1, d'où ma question !
    Mais maintenant que j'ai l'explication de cette différence de comportement suivant le navigateur, le problème est résolu.

    Si ça peut servir.
    A+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Programme Java POI
    Par sternan dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 06/08/2009, 16h41
  2. [Java/J2ee][Word] Génération d'état
    Par maloups dans le forum Autres outils décisionnels
    Réponses: 1
    Dernier message: 24/09/2008, 14h51
  3. java et word
    Par florent_de_brest dans le forum Documents
    Réponses: 1
    Dernier message: 14/09/2007, 11h38
  4. coloration syntaxique code java dans Word
    Par zais_ethael dans le forum API standards et tierces
    Réponses: 10
    Dernier message: 25/05/2006, 19h07
  5. Java et Word
    Par parasol007 dans le forum Documents
    Réponses: 3
    Dernier message: 04/04/2006, 18h46

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