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

- [Refactoring] ReSharper pour Visual Studio 2010 (Preview) par Thomas Jaskula le il y a 4 heures et 35 minutes

- [Refactoring] Analyser vos exceptions avec ReSharper Exceptional par Thomas Jaskula le il y a 5 heures et 49 minutes

- SharePoint 2007 : patterns & practices SharePoint Guidance par Philippe Sentenac [MVP SharePoint] le il y a 19 heures et 28 minutes

- [Visual Studio 2010] Les tests cases c’est bien, mais je vais devoir tout réécrire ? par Etienne Margraff le il y a 20 heures et 25 minutes

- MVP[Gribouillon].AddYear par The Grib's Lair [Sébastien PICAMELOT - MVP SharePoint] le il y a 20 heures et 40 minutes

- Clinique INSIA - Projet de fin d’Etudes (Silverlight 3 MVVM et OutOfBrowser, WCF, TFS) - Part 1 par David REI le 07-02-2009, 23:38

- C’est la crise ? Bah pourquoi cramer du budget pub alors ? par Nix's Blog le 07-02-2009, 15:31

- Soyons MVP ! par TheSaib .NET blog le 07-02-2009, 12:15

- SharePoint : Gestion des Erreurs 6398, 7076 et 6482 par Blog Technique de Romelard Fabrice le 07-02-2009, 11:53

- EF avec WPF par Matthieu MEZIL le 07-02-2009, 10:18