[.NET 3.0] OPENXML MANAGER - CHARGEMENT ET EDITION/SAUVEGARDE DES DOCUMENTS OPE

cs_Willi Messages postés 2375 Date d'inscription jeudi 12 juillet 2001 Statut Modérateur Dernière intervention 15 décembre 2018 - 19 juin 2007 à 13:00
amjadlr Messages postés 1 Date d'inscription mercredi 31 août 2005 Statut Membre Dernière intervention 7 juillet 2008 - 7 juil. 2008 à 21:10
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/43170-net-3-0-openxml-manager-chargement-et-edition-sauvegarde-des-documents-openxml

amjadlr Messages postés 1 Date d'inscription mercredi 31 août 2005 Statut Membre Dernière intervention 7 juillet 2008
7 juil. 2008 à 21:10
Fusionner des docx dans un seul docx :

Bonjour,

En utilisant Open XML Format SDK 1.0 (C# ou VB.Net), Je veux construire un fichier .docx à partir de plusieurs autres fichiers .docx qui constituent chacun une partie du document final. Par exemple :
Entete.docx (qui contient l’Entête du document final - texte et images)
Pied-de-page.docx (qui contient le pied de page du document final - texte et images)
Paragraphe-1.docx (qui contient le paragraphe 1 du document final - texte et images)
Paragraphe-n.docx (qui contient le paragraphe n du document final - texte et images)
Annexe.docx (qui contient un autre document avec un entête et pied-de-page et une numérotation de page indépendante du document principale - texte et images)

Merci.
romagny13 Messages postés 687 Date d'inscription lundi 10 janvier 2005 Statut Membre Dernière intervention 27 août 2014 3
26 juil. 2007 à 20:34
- oui c'est vrai en fait tant qu'un package est "ouvert" (en cours d'utilisation) on ne peut pas l'ouvrir avec Office ,moi j'ai le message que le fichier est utilisé ..
- "ouvrir le package tant qu'il est ouvert avec application" oui c'est aussi une chose a laquelle j'avais pensé mais justement la gestion du fait qu'il faut "liberer" le package a fait que j'avais laissé cette idée de coté

- "c'est de pouvoir choisir ce chemin aussi dans la boite de dialogue pour la création de package." a ok roo c'est du luxe ca lol

- "comparer 2 packages" héhé moi aussi c'est pour ca j'ai integré une tool nommée "comparator" qui permet de comparer deux sources (donc logiqument par exemple une bonne créée depuis office et l'autre ou il y aurait par exemple une petite erreur afin de la trouver et comprendre comment l'ensemble "s'orchestre")

-"intellisense dans l'édition du XML" oui c'est ce qu'il me semble le mieux pour editer manuellement les differentes parts, ainsi on sait exactement ce que l'on peut saisir à l'emplacement et donc on risque nettement moins de faire des erreurs

car en fait actuellement il n'y a pas de Framework encore suffisamment complet pour pouvoir editer ses parts via une interface graphique, il n'y a que le SDK que j'ai mis en lien mais qui actuellement est a son debut et fait pas beaucoup plus qu'avec windowbase, il y a aussi un projet qui a l'air vraiment interessant OpenXml4J qui est plus avancé mais ils ont trouvé le moyen de le developper pour Java (wygwam-julien chable qui a justement un blog sur CodeS-SourceS) grr lol

le truc aussi qui me gene pour l'intellisense,c'est qu'il faut pas que l'application rame des que en plus la part ouverte comporte 5000 ou plus de lignes ...,pour ca il faudrait egalement que j'ameliore la coloration syntaxique qui a deja tendance a monopoliser pas mal de ressources

bon si je dois tout faire lol tu me donnes beaucoup de bouleau lol
++
cs_mathmax Messages postés 403 Date d'inscription vendredi 28 octobre 2005 Statut Membre Dernière intervention 31 août 2008
26 juil. 2007 à 11:10
Ce que je voulais dire par : "quitter l'application pour que les modifications s'appliquent", c'est que je ne peux pas ouvrir le package avec Excel tant qu'il est ouvert avec ton application. (si j'essaie, j'obtiens un message d'erreur qui me dit que l'extension n'est pas valide. J'utilise office 2003 avec le plugin FileFormatConverters mais je pense que c'est la même chose avec office 2007) Donc je dois fermer ton appli à chaque fois que je veux voir ce que ça donne dans Excel, ce qui est un peu embêtant... L'idéal serait d'avoir un bouton "visualiser avec office" (directement dans l'appli et qui ouvre avec Excel, Word ou PowerPoint selon l'extension du package).

"il suffit d'aller dans les options et selectionner le chemin vers ou sauvegarder puis valider" : oui j'avais vu. Ce que je proposais, c'est de pouvoir choisir ce chemin aussi dans la boite de dialogue pour la création de package. Mais c'est vrai que c'est secondaire...

"pouvoir ouvrir plusieurs package en même temps et ouvrir chaque package-part dans un nouvel onglet" : En ce qui me concerne, j'ai souvent besoin de comparer 2 packages (un qui fonctionne et l'autre qui bug). C'est pour ça que j'ai pensé à ça.

"si on supprime une part, ca serait assez compliquer de pouvroir annuler" : sans aller jusqu'à là, ce serait bien déjà de pouvoir annuler/restaurer les modifications faite dans une part.

Après je pensais aussi à ajouter un peu plus d'intellisens dans l'édition du XML (comme ce qui se fait dans Visual Studio). Avec éventuellement de l'auto complétion des balises grâce à un schema XML pour Open Xml. Mais là je pense que c'est un peu plus difficile à faire...

Je vais regarder ce Microsoft SDK for Open XML Formats. S'agit-il d'un modèle objet qui permet de faire de l'Open Xml ?

Merci encore pour ce programme. Il m'est vraiment très utile ;-)
romagny13 Messages postés 687 Date d'inscription lundi 10 janvier 2005 Statut Membre Dernière intervention 27 août 2014 3
26 juil. 2007 à 09:54
Salut MathMax ,excellentes suggestions !!
alors je vais essayer de repondre dans l'ordre :
- "pouvoir ajouter un fichier" : oui c'est vrai que actuellement on ne peut ajouter qu'une image dans le package,c'est une chose à laquelle j'avais pensé
- "quitter l'application pour que les modifications " ?? je ne comprends pas trop , il suffit de sauvegarder une part lorsqu'on la modifié
- "préciser un chemin où l'on souhaite l'enregistrer" : c'est deja possible, par defaut les fichiers sont sauvegardés dans "mes documents" mais il suffit d'aller dans les options et selectionner le chemin vers ou sauvegarder puis valider (bouton validate)
- "pouvoir ouvrir un package par glisser-déposer dans l'application" : oui c'est rapidement faisable vu que je l'avais deja fait pour une autre appli
- "pouvoir ouvrir plusieurs package en même temps et ouvrir chaque package-part dans un nouvel onglet" : la je suis moins pour , je ne suis pas trop adepte pour ouvrir "50" onglets je prefere que l'on se consacre sur une part à la fois ,ou un package à la fois, même si c'est vrai que parfois on aurait besoin d'avoir plusieurs part d'ouvertes en meme temps notamment avec les relations (exemple recuperer un rId pour l'appliquer dans word/document.xml), je vais reflechir ..

- annuler (ctrl+Z) et restaurer (ctrl+Y): oui c'est faisable(il faut utiliser le pattern command)
même si pour un package c'est quand même particulier (exemple si on supprime une part, ca serait assez compliquer de pouvroir annuler)

je ne suis plus trop sur cette application en ce moment mais je vais peut etre m'y remettre ce week end


sinon tiens pendant que j'y suis je te mets un lien vers Microsoft SDK for Open XML Formats, qui est le début de framework pour mieux interagir avec le package(tout n'est pas implementer) mais cela peut t'interesser si tu connais pas
http://www.microsoft.com/downloads/details.aspx?FamilyId=AD0B72FB-4A1D-4C52-BDB5-7DD7E816D046&displaylang=en
si tu as d'autres idées oui je veux bien :p :)
++
cs_mathmax Messages postés 403 Date d'inscription vendredi 28 octobre 2005 Statut Membre Dernière intervention 31 août 2008
24 juil. 2007 à 16:47
J'oubliais aussi :
- pouvoir ouvrir plusieurs package en même temps et ouvrir chaque package-part dans un nouvel onglet.
- pouvoir annuler (ctrl+Z) et restaurer (ctrl+Y).
J'ai pleins d'autre idées, mais je n'ose pas trop en poster. Je crois que j'ai mis l'essentiel en ce qui me concerne. En tous cas merci beaucoup. Cette petit application m'aide beaucoup pour faire mes tests avec ce format de fichier.
cs_mathmax Messages postés 403 Date d'inscription vendredi 28 octobre 2005 Statut Membre Dernière intervention 31 août 2008
24 juil. 2007 à 16:38
Merci beaucoup !
Quelques suggestions :
- on ne peux pas ajouter de fichier xml dans le package. Par exemple j'aimerais pouvoir ajouter un fichier sharedStrings.xml
- il faut forcément quitter l'application pour que les modifications s'appliquent. Ca serait bien de pouvoir enregistrer sans quitter et éventuellement d'avoir un bouton de pré visualisation qui ouvre le package dans word, dans power point ou Excel selon l'extension
- quand on crée un package, ça serait bien de pouvoir préciser un chemin où l'on souhaite l'enregistrer. On peut l'écrire directement, mais c'est pas super pratique. Donc un browser comme dans les options serait le bienvenue je crois.
- pouvoir ouvrir un package par glisser-déposer dans l'application.
romagny13 Messages postés 687 Date d'inscription lundi 10 janvier 2005 Statut Membre Dernière intervention 27 août 2014 3
8 juil. 2007 à 22:09
Bon j'ai ajouté la possibilité de créer un package Excel ou Powerpoint (en plus de Word) à partir de rien ,j'utilise beaucoup LoadXml XmlDocument mais bon il y a toutes les relations, cela devrait interesse certains ;)
bon il reste plus qu'à implementer les custom xml parts ,surement la prochaine etape
romagny13 Messages postés 687 Date d'inscription lundi 10 janvier 2005 Statut Membre Dernière intervention 27 août 2014 3
7 juil. 2007 à 19:21
Bonjour
c'est simple
cela provient de la premiere ligne de code

vous ouvrez le package en création(FileMode.Create)(du coup cela écrase tout les fichiers)
alors qu'il faudrait le faire avec FileMode.Open par exemple :

Package pkgOutputDoc = System.IO.Packaging.Package.Open(FileName, System.IO.FileMode.Open, System.IO.FileAccess.ReadWrite);

sinon je viens d'ajouter la possibilité de supprimer les parts (packagepart) à l'application
en attendant que je me remette sur l'appli (je reflechis même pour développer un mini framework pour mieux gérer les differents "types" de packages(Excel,Word,Powerpoint) et pour chacun les fichiers spécifiques, je m'inspire un peu de ce qui est fait pour System.XmlSchema) et je reflechis aussi pour ajouter l'intellisense ce qui serait pas mal (même si certains packageparts je risuqe de peiner car il faudrait gérer plusieurs schémas xml simultanément encore que ce soit surtout qu'il faut que l'application ne "rame" pas trop)

+
cs_mathmax Messages postés 403 Date d'inscription vendredi 28 octobre 2005 Statut Membre Dernière intervention 31 août 2008
7 juil. 2007 à 16:29
Bonjour,

j'ai un problème pour mettre à jour une feuille de mon document Excel. Tous les fichier présents dans le package sont supprimés alors que je voudrait seulement écraser la feuille que je met à jour.
Voici le code que j'utilise pour sauvegarder le package :

Package pkgOutputDoc = Package.Open(fileName, FileMode.Create, FileAccess.ReadWrite);
Uri uri = new Uri(string.Format("/xl/worksheets/sheet{0}.xml", sheetNumber), UriKind.Relative);
PackagePart partSheetXml = pkgOutputDoc.CreatePart(uri, "application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml");
StreamWriter streamStartPart = new StreamWriter(partSheetXml.GetStream(FileMode.Create, FileAccess.Write));
xmlStartPart.Save(streamStartPart);
streamStartPart.Close();
pkgOutputDoc.Flush();
pkgOutputDoc.CreateRelationship(uri, TargetMode.Internal,
"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument",
"rId1");
pkgOutputDoc.Flush();
pkgOutputDoc.Close();

Avez-vous une idée du problème ?

merci d'avance.
romagny13 Messages postés 687 Date d'inscription lundi 10 janvier 2005 Statut Membre Dernière intervention 27 août 2014 3
20 juin 2007 à 01:10
Baa le code est "en travaux" :p lol
surtout que je sais pas si ca vient de moi mais j'ai tendance à peiner avec OpenXml, j'ai essayé de créer un document word à partir de rien (pas avec que le "minimum") c'est à dire tous les fichiers et relations mais il faudra que je m'y remette parce que la je n'ai pas réussi completement, en fait apres je pensais pouvoir tout simplement permettre par exemple l'ajout dynamique d'images dans le package (+ le dossier media donc)
et dans l'idée je veux voir en OpenXml une utilisation plus professionnelle (entreprise) car c'est la que je vois le vrai interet (peut etre) de ce format

++
cs_Willi Messages postés 2375 Date d'inscription jeudi 12 juillet 2001 Statut Modérateur Dernière intervention 15 décembre 2018 22
19 juin 2007 à 13:00
Pouaa je n'ai pas encore regardé le code mais merci pour cette source il fallait bien que quelqu'un se lance sur le sujet :)

Bonne continuation.
Rejoignez-nous