[.NET 3.0] OPENXML MANAGER - CHARGEMENT ET EDITION/SAUVEGARDE DES DOCUMENTS OPE
cs_Willi
Messages postés2375Date d'inscriptionjeudi 12 juillet 2001StatutModérateurDernière intervention15 décembre 2018
-
19 juin 2007 à 13:00
amjadlr
Messages postés1Date d'inscriptionmercredi 31 août 2005StatutMembreDerniè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.
amjadlr
Messages postés1Date d'inscriptionmercredi 31 août 2005StatutMembreDerniè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és687Date d'inscriptionlundi 10 janvier 2005StatutMembreDernière intervention27 août 20143 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és403Date d'inscriptionvendredi 28 octobre 2005StatutMembreDernière intervention31 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és687Date d'inscriptionlundi 10 janvier 2005StatutMembreDernière intervention27 août 20143 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
cs_mathmax
Messages postés403Date d'inscriptionvendredi 28 octobre 2005StatutMembreDernière intervention31 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és403Date d'inscriptionvendredi 28 octobre 2005StatutMembreDernière intervention31 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és687Date d'inscriptionlundi 10 janvier 2005StatutMembreDernière intervention27 août 20143 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és687Date d'inscriptionlundi 10 janvier 2005StatutMembreDernière intervention27 août 20143 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 :
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és403Date d'inscriptionvendredi 28 octobre 2005StatutMembreDernière intervention31 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és687Date d'inscriptionlundi 10 janvier 2005StatutMembreDernière intervention27 août 20143 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és2375Date d'inscriptionjeudi 12 juillet 2001StatutModérateurDernière intervention15 décembre 201822 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 :)
7 juil. 2008 à 21:10
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.
26 juil. 2007 à 20:34
- "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
++
26 juil. 2007 à 11:10
"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 ;-)
26 juil. 2007 à 09:54
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 :)
++
24 juil. 2007 à 16:47
- 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.
24 juil. 2007 à 16:38
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.
8 juil. 2007 à 22:09
bon il reste plus qu'à implementer les custom xml parts ,surement la prochaine etape
7 juil. 2007 à 19:21
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)
+
7 juil. 2007 à 16:29
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.
20 juin 2007 à 01:10
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
++
19 juin 2007 à 13:00
Bonne continuation.