Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Julien Chable

He blogs, you blog, I blog ...

[Open XML] Supprimer une partie avec Package.DeletePart ou OpenXmlPartContainer.DeletePart

Quelle différence entre ces deux méthodes pour supprimer une partie d'un document Open XML ? La première est celle proposée par l'espace de nom System.IO.Packaging et l'autre par le SDK Open XML.

Voici le code de suppression de la partie de commentaire en vous servant de la classe System.IO.Packaging.Package :

doc.Package.DeletePart(doc.MainDocumentPart.WordprocessingCommentsPart.Uri);

Remarque : comme vous pouvez le constater, le SDK Open XML v2.0 étant une surcouche de System.IO.Packaging, les objets sous jacents (ici Package) sont toujours accessible pour permettre des manipulation plus fines que ne permettrait pas le SDK aux experts du format.

et celui utilisant le SDK 2.0 :

doc.MainDocumentPart.DeletePart(doc.MainDocumentPart.WordprocessingCommentsPart);

La réponse en image :

La partie de commentaire - celle que nous souhaitons supprimer - est stockée dans /word/comments.xml ...

image

...et est référencée dans la partie de relation de la partie de contenu  (/word/_rels/document.xml.rels) :

image

Si vous utilisez la méthode Package.DeletePart(), voici ce qu'il va se passer dans votre package (en plus de ne plus pouvoir l'ouvrir dans Word ! Vous allez comprendre pourquoi) :

image

La partie n'est plus dans le package : opération réussie ! Enfin pas tout à fait ...

image

... car la relation est toujours présente ! Ce qui fait que vous référencez toujours pour le consommateur - ici Word 2007 - une partie qui n'existe plus. Il vous faudra donc supprimer la relation 'manuellement' en complétant votre code par la suppression d'une relation avec Package.DeleteRelationship(). Dans ce cas bien précis d'une suppression de la partie de commentaire, la manipulation nécessitera - comme nous l'avons dans ce post - de supprimer également les références dans le corps du contenu du document Word.

Remarque : un point intéressant ici concernant l'ouverture de ce document corrompu par OOo 3.0. En effet, OpenOffice 3.0 ouvre le document sans problème mais sans vous avertir que vous avez perdu des données. Un comportement que je trouve assez dangereux sur le fond ; d'autres le trouveront sûrement à leur goût.

Dans le cas où vous utilisez la méthode OpenXmlPartContainer.DeletePart() voici le résultat :

image

La partie est bien supprimée ...

image

.. et la relation aussi.

La différence est donc que le SDK, qui se veut être une abstraction des précédentes APIs, fera le ménage des dépendances au niveau des relations sans que vous ayez à le faire manuellement. Une différence qu'il est important de noter si vous avez des manipulations complexes à effectuer sur vos documents.

Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :
Posted: mercredi 19 novembre 2008 13:00 par neodante
Classé sous :

Commentaires

Pas de commentaires

Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- Nouveau système d'aide pour Visual Studio 2010 : pour ceux qui n'apprécient pas trop l'absence d'index... par CoqBlog le il y a 11 heures et 34 minutes

- L'interface naturelle de Windows Phone 7 Series par Perspective le il y a 12 heures et 51 minutes

- Comment mapper une vue SQL sur une collection de complex type? par Matthieu MEZIL le 03-19-2010, 21:05

- SQL Server : Query Notification ou comment être notifié de modifications de données côté application (SqlDependency) par SQL Server vu par Christian Robert le 03-19-2010, 15:06

- [WF4] Un Binding Activity/ActivityDesigner qui passe mal? par Blog de Jérémy Jeanson le 03-19-2010, 13:42

- MyTIC – SharePoint 2010 : déjà un mythe Microsoft ? par Le Blog (Vert) d'Arnaud JUND le 03-19-2010, 08:54

- TechDays 2010 Genève : Retrouvez-moi pour une session sur la Haute disponibilité et le ScaleOut avec SQL Server par SQL Server vu par Christian Robert le 03-18-2010, 15:45

- [MIX10] Keynote deuxième journée – Internet Explorer 9, Html5, Visual Studio 2010, OData par Atteint de JavaScriptite Aiguë [Cyril Durand] le 03-17-2010, 19:40

- Certifications beta .NET 4 par Kévin Gosse le 03-17-2010, 19:33

- [Mix 2010] – Microsoft Translator Technology Preview V2 par RedoBlog - The .NET Gentleman !!! le 03-17-2010, 18:53