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

Word Discussion :

Enregistrer un document docx [WD-2010]


Sujet :

Word

  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 Enregistrer un document docx
    Bonjour à tous,

    J'ai un fichier .docx qui a été modifié (précision importante). En effet, j'ai renommé le fichier en .zip, puis j'ai ajouté un fichier .xml directement en faisant glisser mon fichier dans l'archive zip.
    Puis dans mon code, le document est ouvert et j'essaie de faire une copie de mon document comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    'Copie du fichier
    Dim wrdApp As Word.Application
    'Création d'un nouveau fichier à l'identique du fichier original
    wrdApp.Documents.Add(modeleWd.FullName)
    'Sauvegarde du nouveau fichier
    wrdApp.ActiveDocument.SaveAs2("c:\temp\test.docx")
    'Fermeture du nouveau fichier afin de se repositionner sur le fichier original
    wrdApp.ActiveDocument.Close()
    Cela fonctionne bien, mais je viens de m'apercevoir, que mon fichier xml avait disparu de l'archive zip !!!

    J'ai fait un test tout simple, en créant un fichier .docx directement à partir de Word. J'ai fermé le fichier, ajouté le fichier .xml comme décrit au-dessus, j'ai ré ouvert le fichier, j'ai enregistré le nouveau fichier et effectivement, mon fichier .xml a bien disparu.

    Donc, le problème n'est pas lié à mon code, mais très certainement à la "structure" XML du fichier .docx modifié.

    J'ai regardé la structure des nouveaux fichiers .docx et je vois à peu près l'organisation, les liens qui sont faits entre les fichiers, mais n'y a t-il pas quelque chose de tout simple à faire ?
    Est-ce que quelqu'un sait comment ajouter un fichier de ce type et surtout comment modifier la structure du .docx pour que l'enregistrement soit OK ?


    D'avance merci pour votre aide.

    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
    Mon problème est corrigé.

    Pour info, le soucis était lié à ma façon d'ajouter le fichier xml au docx en java. Comme je ne respectais pas l'architecture du docx, dès que j'enregistrais à nouveau mon fichier docx, le fichier de données précédemment ajouté était supprimé du nouveau fichier sauvegardé.

    Si ça intéresse quelqu'un, voilà le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    //+ Ouverture du fichier en utilisant la classe OPCPackage de POI
    OPCPackage opcPackage = OPCPackage.open(new File(fileorig));    //+ filename étant le fichier d'origine .docx (chemin + nom du fichier) qu'on souhaite modifier
    //+ Ajoute le fichier de données xml dans la partie customXml du document .docx
    addCustomXmlPart(opcPackage, path, filecustomxml);      //+ path étant le chemin dans lequel on souhaite enregistrer le nouveau document .docx et filecustomxml étant le fichier de données personnalisées à ajouter dans la structure du document .docx
    //+ Sauvegarde des modifications
    opcPackage.save(new File(path + filenew));     //+ filenew étant le nom du nouveau document .docx
    opcPackage.close();
    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
     
    //================================================================================
    /**
    * Ajoute un fichier XML personnalisé dans la structure d'un document .docx
    * @param <b>opcPackage</b>  E : instance OPCPackage sur le document .docx à modifier
    * @param <b>path</b>  E : Répertoire de sauvegarde du nouveau document .docx
    * @param <b>file</b>  E : Nom du fichier à ajouter dans la partie customXml de la structure du .docx
    */
    //================================================================================
    public void addCustomXmlPart(OPCPackage opcPackage, String path, String file)
    throws InvalidFormatException, IOException
    {
        try
        {
            PackagePartName partName = PackagingURIHelper.createPartName("/customXml/"+file);
    	PackagePart part = opcPackage.createPart(partName, ContentTypes.PLAIN_OLD_XML);
    	OutputStream outputStream = part.getOutputStream();
            //+ Ecriture du fichier de données dans la partie customXml de la structure du document .docx
            FileInputStream in = new FileInputStream(path + file);
    	BufferedInputStream inBuffer = new BufferedInputStream(in);
    	int theByte = 0;
    	while ((theByte = inBuffer.read()) > -1)
    	{
    	    outputStream.write(theByte);
    	}
     
    	outputStream.close();
    	inBuffer.close();
    	in.close();
     
    	part.addRelationship(partName, TargetMode.INTERNAL, PackageRelationshipTypes.CUSTOM_XML);
     
    	PackagePartName mainDocumentPartName = PackagingURIHelper.createPartName("/word/document.xml");
    	PackagePart mainDocumentPart = opcPackage.getPart(mainDocumentPartName);
    	mainDocumentPart.addRelationship(partName, TargetMode.INTERNAL, PackageRelationshipTypes.CUSTOM_XML);
        }
        catch (Exception e)
        {
             //+ Traitement des exceptions...    		
        }
    }

  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
    ERRATUM.

    La ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    PackagePart part = opcPackage.createPart(partName, ContentTypes.PLAIN_OLD_XML);
    doit être remplacée par la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    PackagePart part = opcPackage.createPart(partName, ContentTypes.CUSTOM_XML_PART);

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

Discussions similaires

  1. Ouvrir, éditer, enregistrer documents docx/odt directement sur le serveur
    Par SeigneurMartin dans le forum Général Conception Web
    Réponses: 1
    Dernier message: 17/05/2013, 08h09
  2. enregistrer document docX dans sqlserver
    Par tortuegenie dans le forum ASP.NET
    Réponses: 8
    Dernier message: 09/09/2009, 13h34
  3. [DOM] Enregistrer un Document dom dans un fichier xml
    Par java_girl dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 09/09/2006, 20h38
  4. [DOM] [Axis] Enregistrement de document DOM
    Par ep31 dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 01/02/2006, 11h21

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